mysql数据库中的属性⽤法_数据库mysql数据类型和字段属性
原理与⽤法详解
本⽂实例讲述了mysql数据类型和字段属性。分享给⼤家供⼤家参考,具体如下:
本⽂内容:
数据类型
数值类型
整数型
浮点型
定点型
⽇期时间类型
字符串类型
补充:
显⽰宽度与zerofll
记录长度
字段属性
空\不为空值:NULL、NOT NULL
主键:primary key
唯⼀键:unique key
⾃增长:auto_increment
默认值:default
字段描述:comment
补充:
复合键
⾸发⽇期:2018-04-08
数据类型:
mysql的数据类型就是存储数据的类型。
数值类型:
整数类型:tinyint,smallint,mediumint,integer,bigint
默认是有符号,如果需要使⽤⽆符号的数据类型要在后⾯加"UNSIGNED"
类型
简写
字节⼤⼩
(signed)范围
(unsigned)范围
备注
整数型:
TINYINT
1
0~255
-128~127
SMALLINT
2
0~65535
-32768~32767
MEDIUMINT
3
0~16777215
-8388608~8388607
INTEGER
INT
4
0~4294967295
-2147483648~2147483647
BIGINT
8
0~264-1
-263~263-1
⼩数类型:
浮点类型:float(size,d),double(size,d)
size是数值的最⼤位数,d是⼩数点右侧的位数(即使你没输够那么多位也会补全那么多位)。
FLOAT的精度为6~7位(依据情况不同?毕竟机器是以⼆进制存储的),DOUBLE的精度为14~15位
整数部分的个数为SIZE-D,直接存⼊的值的个数不能多于这个,但如果浮点数四舍五⼊导致整数进位⽽溢出超过最⼤位数的,系统允许成⽴(某些版本貌似已经不允许了,所以⼀般⼩数位也不要超过)。
很多时候没必要关注两个浮点的数值范围⼤⼩(是极⼤的),注重点应该是它的精度。
定点型:decimal(size,d)
size是数值的最⼤位数,最⼤为65,d是⼩数点右侧的最⼤位数,最⼤为30。
定点型不允许因为⼩数部分四舍五⼊导致整数部分长度超出范围。
DECIMAL是不会损失精度的。可以理解成使⽤“字符串”存储(MYSQL权威指南这么说)。
直接不带括号的数据类型float、double、decimal代表没有⼩数部分
时间⽇期类型:
时间⽇期类型包括date,time,datetime,timestamp,year;
Datetime:时间⽇期,格式是YYYY-MM-DD HH:II:SS,表⽰的范围是从1000到9999年(有些版本已经允许0-9999?不确定);
Date:⽇期,格式是YYYY-MM-DD ,表⽰的范围是从1000到9999年
Time:时间段,格式是HH:II:SS, 指定的时间在某个区间之间,有正负。表⽰的范围 -838:59:59~838:59:59,这代表某个⽇期的前后时间范围【如果你仅仅想要⽤来表⽰24⼩时内的时间,可以忽略它的时间范围】
Timestamp:格式是YYYY-MM-DD HH:II:SS,表⽰的范围从1970-01-01 00:00:00到2038-01-19 03:14:07 【⼀旦该⾏记录被修改,那么timestamp会修改成当前时间。】
Year:年份,表⽰的范围1901-2156
原本有两种格式,year(2)和year(4),但5.7中移除了year(2)。
字符串类型  :
set  :集合字符串。将⼀个个特定的字符串放到集合⾥⾯。
定义了集合之后,不能插⼊集合元素之外的字符串,(可以插⼊多个符合条件的字符串)
集合字符串实际上也是仅仅存储数值,系统⾃动转换成对应的字符串。
集合中每⼀个元素对应⼀个⼆进制位,被选中的为1,没选中的为0,左边为⼆进制中的低位,右边为⾼位,从右到左得到⼆进制结果
create table my_set(
hobby set('football','basketball','pingpong','computer')
)charset utf8;
mysql创建表数据类型insert into my_set values('basketball,computer');
insert into my_set values(3);-- 3=0011
insert into my_set values(5);-- 5=0101
enum  :枚举字符串
有点类似set,但这⾥只能插⼊⼀个字符串(set类型的字段的值可以是多个set元素,但enum只能是其中⼀个元素)
将可能出现的数据列举出来,实际存储的数据只能是列举出来的数据。
使⽤枚举有利于统⼀数据,以及节省存储空间(枚举只是存储数值,系统转换成字符串)。
枚举元素实际上按定义的顺序标号,从1开始,所以可以直接插⼊枚举元素对应的数值。
如:
create table my_enum(
gender enum('male','female','unknown')
)charset utf8;
blob  :⼆进制数据字符串
存储⼆进制数据(少⽤)
text  :⽂字字符串
存储⽂字,当字符⼤于255时,⼀般使⽤text;
varchar  :变长字符串
varchar(L),L代表字符长度,单位为字符,最⼤长度为65536。在实际存储中需要1到2个字节来存储长度(1还是2由实际⼤⼩决
定,216=35536,<=255的⼀般⼀个字节),在使⽤时根据定义的⼤⼩来分配空间,但会根据实际需要使⽤的缩⼩空间(⽐如规定60⼤⼩,实际只有30,那么实际空间就是31~32)。
当L⼤于255时,建议使⽤Text,⽽不是varchar;
char  :定长字符串
char(L),L代表字符长度,单位为字符,最⼤长度为255,不使⽤L时默认为1
不同环境中根据字符⼤⼩,实际占有的空间不同;在UTF8环境下,char(4)所⽤的字节数为4*3=12;
补充:
显⽰宽度 与填充 :
在列类型后⾯显⽰的数值,代表数据最终显⽰的最少位数(包含符号)。
⼀般不够显⽰宽度的数据都会采⽤空格填充,也可以使⽤zerofill来使⽤零填充(零填充会导致数据类型⾃动变成⽆符号的)。tiny(3)的空格填充效果:
,zerofill效果:
create table myInt(t1 TINYINT(3));
drop table myInt;
insert into myInt values(127),(1);
select * from myInt;
alter table myInt modify t1 tinyint(3) zerofill;
select * from myInt;
不要轻易的使⽤最⼤限度来存储字符串,因为涉及记录长度问题  :
MySQL中规定任何⼀条数据最长不能超过65535个字节
如果有任何⼀个字段允许为空,那么系统会⾃动从整个记录中保存⼀个字节来存储NULL;
text⽂本不占⽤记录长度,额外存储。
UTF8中varchar的最⼤限度:65535-2(需要两个字节来存储长度)  /3=21844,所以最⼤字符数为21844
GBK中varchar的最⼤限度:65535-2(需要两个字节来存储长度) /2=32766
字段属性:
字段属性是字段除数据类型外的属性,⼀般有空\不为空值、主键、唯⼀键、⾃增长、默认值、描述等属性。
空\不为空值:NULL、NOT NULL

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。