当前位置:文档之家› 完整Mysql燕十八学习笔记

完整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经测试,Tinyint 的默认为有符号-128~127之间,当越界时自动取相应 的边界值。

若要存0~255无符号时:列的可选属性:Tinyin t (M ) un sig ned zerofill.M :宽度(在0填充的时候才有意义)Un sig ned:无符号类型(非负),影响存储范围 Zerofill :0填充(默认无符号)1> insert into test-> (name,age3)-> ualu&s->「赵六'/S');u QIC, 1 row aff©et&d (0.00 soc)箕from t&st;I id I name I age I agel I age2 I age3 I卜--------- + ------------- + --------------- + -------------- + --------------- + ----------------- +rows in at (0.07 SEC)列可以声明默认值,而且推荐声明默认值not null default 0; ysql> alter table test add tinyint(3j not null default 0;uery 0IC, 9 rows affected (0.13 $ec)ecords: 9 Duplicates: 0 Uarnings: O小数型/浮点型、定点型Float(M,D):M代表总位数,D代表小数位(6,2)为例:-9999.99 ->9999.99 12345G789一一一一张张张张李张李王制LLuNi NULLLLuNLLJNI NULL NULLLLuN三四三四五六6NULL NULL I NULL ILLuNNULL | 2G0 | NULL | NULL !NULL I 0 I NULL I NULL |NULL I NULL I 127 I NULL Iy$ql> t M from 七。

兮七;------ - -------------------------- + ----- ------I id I name I age I agel I age2 I age3 I age4 II 25 I NULL I I 127 INULL II -128 I NULL I I 127 INULL II -100 | NULL I I NULLI 200 II NULL I 0 I I NULL INULL II NULL I NULL INULL I NULL I NULLI NULL I NULL INULL I NULL I NULLI NULL I NULL INULL I NULL I NULLI NULL I127 I NULL I NULL I00005 INULL I 06305 I123456T89三三三_:一四三四五六张张张张李张李王赵Decimal(D,M):忙瀨宽度” 芳顶UA 毎煦字再孟网小说2押呱左右』Char :定长,char (M ),M 代表宽度,即:可容纳的字符数 0<二M<=255 Varchar :变长,0<二M<=65535约2W —6W 个字符受字符集影响) Text 文本串,(约2W —6W 个字符受字符集影响)区别在哪呢?char 定长:M 个字符,如果存的小于 M 个字符,实占M 个字符 varchar : M 个字符,存的小于 M 个字符,设为 N , N<M ,实占N 个字符I Null I Key I Default I Extra I+ ------------------- + ----------------- + ------------------------------ + ------------------------ 4I nam^ I varthar(10) I NO I price I floatfG,2) I NO I bigprice I decimal(9?2) I NO IdecipriceI decimal(9,2)I NOI 0.00I 6.06 I 0,0G4 row© in set (0.01 see)my$ql> insert into t©st2-> (name,bigprice ,decipric^) -> glues-> (■自行车 * , 11234567.23' , ' 1 23H567.23 ");Query OK, 1 row affected (0.0G sec) mysql> select 箕 FROM test2; I name I 自行车I price I bigprice I deciprice It ------------------- + --------------------------------- H -------- -------- - -------------- +I o.00 I 1I23H567.23 I 123«67.23 I1 row in set (G.00 G @C )字符型列myoql> d&oc test2; I Field粪韭0 0\D\0<(™ (血r塑如畢不髒M'l'■学7?内莖用空培补齐)因此,char定长若存空格,读取时会丢失。

而变长不会^HiChar利用率小于等于100%,而varchar永远小于100%, 1-2个字节用于标志实存字符长度。

Char(M)如何占据M个字符宽度?答:如果实际存储内容不足M个,贝S后面加空格补齐,取出来的时候再把后面的空格去掉,(所以如果内容后面有空格,将会被清除)选择原则:1. 空间利用效率(M固定选Char)2. 速度速度上:定长速度快些,四. 日期时间列类型忙瀨宽度”芳顶UA毎煦字再孟网小说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-313. Time类型,典型格式hh:mm:ss -838:59:59’ ‘+838:59:59’4. Datetime 典型格式:'989-05-06 12:23:34'‘000-01-01 00:00:00' 9999-12-31 23:59:59'、卜 \ 、、八注意:在开发中很少使用日期时间类型来表示一个需要精确到秒的列,原因:虽然日期时间类型能够精确到秒,而且方便查看。

但是计算不便。

用时间戳来表示。

面试1:当表示性别时,可用1或0表示男女,如,可能会问到为什么不用enum枚举,原因:enum不符合关系型数据库设计理念,而且字节上不比tinyint少。

实例:增删改查之案例过程分析用户注册表单收集,提交数据,注册页面收集到表单的数据后,形成insert语句,user表插入该条数据,用户注册完成前台用户中心,用户新昵称,根据新昵称和用户id,形成update语句,完成昵称修改管理后台点击会员列表,此时,网页形成select语句,查询出所有会员的数据,完成会员的查看管理员后台选中某用户并且删除,捕捉此用户的id,根据用户id形成相应的delete语句执行delete语句,完成用户的删除阶段总结(一)列类型的概念数值型整型tinyint smallint mediumint int bigint整型的unsigned代表无符号,zerofill代表0填充,M代表宽度(在0填充)浮点型/定点型float(M,D) unsigned M 精度,即总位数,D 代表小数位decimal比float更精确。

字符型Char(M)定长,可存储的字符数,M<=255Varchar(M)变长,可存储的字节数,M<=65535Char与varchar的不同点Char(M),实占M个字符,不够M个右侧补空格,取出时,在去除右侧空格,导致右侧真有空格时会丢失。

Varchar(M),有1-2 个字节来标记真实的长度,日期时间型Year 1901-2155,如果输2位,‘00-69'之间+2000,‘70-99'之间+1900Date YYYY-M M-D D范围在1000-01-01 9999-12-31Time HH :ii:ss 范围在-838:59:59 838:59:59Datetime YY-MM-DD HH:ii:ss 1000-01-01 00:00:00 9999-12-31 23:59:59开发中的一个问题—精确到秒的时间表示方式,不是用datetime,而是用int来表示时间戳用时间戳方便计算,而且方便格式化成不同的显示样式。

建表语句Create table 表明(列名称,列类型[列属性][默认值],)engine 引擎名charset 字符集增:insert答:往哪张表增,增那几列,各为什么值?Insert into 表名(列1,列2,..列N)Values(值1,值 2..值N)** 如果不声明插入的列,则默认插入所有列。

改:update答:修改哪张表,修改那几列,修改成什么值?在哪几行上生效?Update 表名Set列1 = 值1,列2 = 值2,列N =值NWhere 表达式;删:delete删除哪张表的数据,删除哪些行?Delete from 表名Where 表达式查:select * from 表名查询的五种语句:where,group,having,order by,limit 一.Where 条件查询比较运算符1. In <值1,值2,值3…..值N>,等于1 N任意一个。

相关主题