您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > Mysql燕十八学习笔记
Mysql三大列类型1.数值型整型Tinyint、Smallint、Mediumint、Int、Bigint小数型Float(D,M),Decimal(D,M)2.字符串型Char(M)Varchar(M)Text文本类型3.日期时间类型Date日期Time时间Datetime时间类型Year年类型一.整型列的字节与存储范围从数学上讨论tinyint,建表时既能足够存放,又不浪费空间。即:(1).占据空间(2).存储范围Tinyint微小的列类型,1字节。类型字节最小值最大值(带符号/无符号)(带符号/无符号)Tinyint1-1281270255Smallint2-3276832767065535Mediumint3-2^232^23-102^24-1Int4-2^312^31-102^32-1Bigint8-2^632^63-102^64-1通过占用字节和所存范围分关系合理的选择类型。例:Tinyint经测试,Tinyint的默认为有符号-128~127之间,当越界时自动取相应的边界值。若要存0~255无符号时:列的可选属性:Tinyint(M)unsignedzerofill.M:宽度(在0填充的时候才有意义)Unsigned:无符号类型(非负),影响存储范围Zerofill:0填充(默认无符号)列可以声明默认值,而且推荐声明默认值notnulldefault0;二.小数型/浮点型、定点型Float(M,D):M代表总位数,D代表小数位(6,2)为例:-9999.99–9999.99Decimal(D,M):三.字符型列Char:定长,char(M),M代表宽度,即:可容纳的字符数0=M=255Varchar:变长,0=M=65535(约2W—6W个字符受字符集影响)Text文本串,(约2W—6W个字符受字符集影响)区别在哪呢?char定长:M个字符,如果存的小于M个字符,实占M个字符varchar:M个字符,存的小于M个字符,设为N,NM,实占N个字符因此,char定长若存空格,读取时会丢失。而变长不会。Char利用率小于等于100%,而varchar永远小于100%,1-2个字节用于标志实存字符长度。Char(M)如何占据M个字符宽度?答:如果实际存储内容不足M个,则后面加空格补齐,取出来的时候再把后面的空格去掉,(所以如果内容后面有空格,将会被清除)选择原则:1.空间利用效率(M固定选Char)2.速度速度上:定长速度快些,四.日期时间列类型Date日期Time时间Datatime时间类型Year年类型1.Year类型:1个字节表示1901-2155年【0000年表示错误时】如果输入两位,“00--69”表示2000—2069,如果输入两位“70--99”表示1970—1999如果记得麻烦,输入四位就行了、2.Date类型:典型格式,1992-08-12‘1000-01-01’’9999-12-31’3.Time类型,典型格式hh:mm:ss‘-838:59:59’’+838:59:59’4.Datetime典型格式:’1989-05-0612:23:34’‘1000-01-0100:00:00’‘9999-12-3123:59:59`注意:在开发中很少使用日期时间类型来表示一个需要精确到秒的列,原因:虽然日期时间类型能够精确到秒,而且方便查看。但是计算不便。用时间戳来表示。时间戳:1970-01-0100:00:00到当前的秒数面试1:当表示性别时,可用1或0表示男女,如,可能会问到为什么不用enum枚举,原因:enum不符合关系型数据库设计理念,而且字节上不比tinyint少。实例:增删改查之案例过程分析用户注册表单收集,提交数据,注册页面收集到表单的数据后,形成insert语句,user表插入该条数据,用户注册完成前台用户中心,用户新昵称,根据新昵称和用户id,形成update语句,完成昵称修改管理后台点击会员列表,此时,网页形成select语句,查询出所有会员的数据,完成会员的查看管理员后台选中某用户并且删除,捕捉此用户的id,根据用户id形成相应的delete语句执行delete语句,完成用户的删除。阶段总结(一)列类型的概念数值型整型tinyintsmallintmediumintintbigint整型的unsigned代表无符号,zerofill代表0填充,M代表宽度(在0填充)浮点型/定点型float(M,D)unsignedM精度,即总位数,D代表小数位decimal比float更精确。字符型Char(M)定长,可存储的字符数,M=255Varchar(M),变长,可存储的字节数,M=65535Char与varchar的不同点Char(M),实占M个字符,不够M个右侧补空格,取出时,在去除右侧空格,导致右侧真有空格时会丢失。Varchar(M),有1-2个字节来标记真实的长度,日期时间型Year1901-2155,如果输2位,‘00-69’之间+2000,‘70-99’之间+1900DateYYYY-MM-DD,范围在1000-01-019999-12-31TimeHH:ii:ss,范围在-838:59:59838:59:59DatetimeYY-MM-DDHH:ii:ss1000-01-0100:00:009999-12-3123:59:59开发中的一个问题—精确到秒的时间表示方式,不是用datetime,而是用int来表示时间戳用时间戳方便计算,而且方便格式化成不同的显示样式。建表语句Createtable表明(列名称,列类型[列属性][默认值],…..)engine引擎名charset字符集增:insert答:往哪张表增,增那几列,各为什么值?Insertinto表名(列1,列2,..列N)Values(值1,值2..值N)**如果不声明插入的列,则默认插入所有列。改:update答:修改哪张表,修改那几列,修改成什么值?在哪几行上生效?Update表名Set列1=值1,列2=值2,….列N=值NWhere表达式;删:delete删除哪张表的数据,删除哪些行?Deletefrom表名Where表达式查:select*from表名查询的五种语句:where,group,having,orderby,limit一.Where条件查询比较运算符1.In值1,值2,值3…..值N,等于1N任意一个。例:selectgoods_idfromgoodswherecat_idin(4,5);2.Between值1and值2,表示在值1和值2之间例:selectgoods_idfromgoodswherecat_idbetween1and5;逻辑运算符1.Not逻辑非例:selectgood_idfromgoodswherecat_idnotin(4,5);2.Or逻辑或3.And逻辑与模糊查询:案例:想查找‘诺基亚’开头的所有商品Like像,%通配任意字符_单个字符Selectgoods_idfromgoodswheregoods_namelike‘诺基亚%’;Selectgoods_idfromgoodswheregoods_namelike‘诺基亚__’;二.Group分组查询Groupby作用:把行按字段分组语法:groupbycol1,col2…colN运用场合:常见于统计场合,如按栏目计算帖子数,统计每个人的平均成绩等。Group与统计函数Max:求最大,min:求最小,sum:求总和,avg:求平均,count:求总行数练习:1.2.3.4.5.6.7.8.9.10.11.12.13.三.Having*******例题:只用一个select,不用子查询和左连接。四.OrderbyOrderby排序功能接一个或多个字段对查询结果进行排序知识点在本项目案例的运用对栏目的商品按价格由高到低或由低到高排序知识点的运用场合描述各种排序场合,如取热点新闻,发帖状元等。多重排序:Limit在语句的最后起到了限制条目的作用。Limitoffset,[N]offset:偏移量,N:条目;如果不写,则从头开始写。即:limit0,N;Truncatetable清空表思考:取出每个栏目下最贵的商品解法一:首先建个临时表g2,将goods表导入g2,此时,g2中每个栏目的第一个goods_id就是该栏目下最贵的那个,再取出每个栏目下的第一个。解法二:思想类似解法一,将select后的结果看作是一张表。五.良好的理解模型1.Where表达式:把表达式放在行中,看表达式是否为真,2.列:理解成变量,可以运算3.取出结果:可以理解成一张临时表六.子查询1.Where型子查询2.From型子查询3.Exist型子查询一.Where型子查询是指把内层的查询结果作为外层查询的比较条件。二.From型子查询把内层的查询结果当成表供外层继续查询使用了from+where子查询。三.Exists子查询把外层的查询结果拿到内层,看内层的查询是否成立。阶段总结二查selectWhere表达式表达式在哪一行成立,哪一行就取出来=,!=/,,,=,=,in,betweenand,or,notGroupby分组,一般和统计函数配合使用Max,min,avg,sum,countHaving数据在表中,表在硬盘或内存以文件形式存在Where就是针对表文件发挥作用的查询的结果,也可以看成一张表,其文件一般临时存在缓冲区针对查询的结果发挥作用Orderby作用:排序可以针对字段,升序【asc】,降序【desc】。有可能一个字段拍不出结果,可以选用其他字段继续排列Limit限制条目Limit【offset】【N】Offset:偏移量N:取出条目,取出3-5条,limit2,3.子查询Where型,内层的查询结果作为外层查询的比较条件From型子查询把内层的查询结果供外层再次查询注意:内层的查询结果看成临时表,加as临时表名Exists型子查询把外层的查询结果带入到内层,看内层是否成立。Union:联合作用:把两次或多次查询结果合并要求:两次查询的列数一致。推荐:查询的每一列,相对应的列类型也一样。可以来自于多张表。多条sql语句union后的列名以第一个sql语句的列名为准。例:利用from型子查询,并配合sum聚合函数来实现。如果不同的语句取出的行,有完全相同,(每个列的值都相同)那么相同的行将会合并(去重复)如果不去重复,可以加all。如果子句中有orderby,limit,需加()。推荐排序放到所有子句之后,即对最终合并的结果进行排序。在子句中,orderby配合limit使用才有意义。不配合limit使用,会被语法分析器优化分析时,去除。连接查询概念与左连接语法子查询就是在原有的查询语句中,嵌入新的查询,来得到我们想要的结果集。一般根据子查询的嵌入位置分为,where型子查询,from型子查询。学习内容左连接,右连接,内连接作用:从两张或多张表中取出相关联的数据应用案例:非常广泛。如取文章及其所在栏目名称去个人信息及其所发布的文章等。数据库中以表为单位存储数据。左连接以左表为准,去右表找匹配数据,找不到匹配,用null补齐右连接内连接如何记忆:1.左右连接可以相互转化2.推荐将右连接转化为左连接,兼容性好一些3.内连接:查询左右表都有的数据,即:不要左右连接中null的那一部分,是左右连接的交集。思考:能否查出左右连接的并集呢?目前不能,目前的mysql不支持外连接。可以使用union来达到目的。三表连接面试题:回顾建表语句:Createtable表名(列名称列类型[列属性][默认值],列声明列名称列类型[列属性][默认值],列名称列类型[列属性][默认值],列名称列类型[列属性][默认值],)charset=utf8/gbk…表增加列,修改列,删除列增加列:Altertable表名add列声明增加的列默认在表的最后一列可以用after来声明新增的列在那一列后面。After
本文标题:Mysql燕十八学习笔记
链接地址:https://www.777doc.com/doc-5477170 .html