如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
数据表的数据列的属性
1 2 3 4 5 6 7 |
1.unsigned 无符号数值 2.zerofill 零填充 3.auto_increment 自增 4.null 建立字段默认为允许为空 5.not null 不允许为空 配合default来使用 6.default 默认值 如果建立字段 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
例子 create table t4( id smallint(7) unsigned zerofill ); insert into t4(id)values(12345);##0012345 #自增 主键 #auto_increment 自增 主键 primary key create table t5( id tinyint unsigned not null primary key auto_increment , username varchar(20) )engine=innodb default charset=utf8; insert into t5(username)values('bb'); # not null 不能为null 不是 '' 0 false insert into t6(username)values(null);#错误 insert into t6(username)values('');#ok insert into t6(username)values(0);#ok #初始值default create table t7 ( id tinyint(4) not null primary key auto_increment , name varchar(20) not null default 'xx' )engine=innodb default charset=utf8; |
数据类型
整数类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# -----整数----- 整数类型 字节数 无符号范围 有符号的范围 TINYINT 1 0~255 -128~127 SMALLINT 2 0~65535 -32768~32767 MEDIUMINT 3 0~16777215 -8388608~8388607 INT 4 0~4294967295 -2147483648~2147483647 BIGINT 8 0~18446744073709551615 -9223372036854775808~9223372036854775808 TINYINT 4 SMALLINT 6 MEDIUMINT 9 INT 11 BIGINT 20 |
1 2 3 4 5 6 7 8 9 |
例子 create table t3( id tinyint (4), tel int (11), username varchar(20) )engine=innodb default charset=utf8; #加数据 insert into t3(tel)values(123456789); |
浮点类型
1 2 3 4 5 6 7 8 9 10 11 |
浮点类型 字节数 负数的取值范围 非负数的取值范围 FLOAT 4 -3.402823466E+38~-1.175494351E-38 0和-1.175494351E-38~3.402823466E+38 DOUBLE 8 -1.79E+308~-2.22E-308 0和-2.22E-308~1.79E+308 DECIMAL M+2 同DOUBLE 同DOUBLE DECIMAL(M,D) M - 精度 数据的总长度 D - 标度 小数点后的长度 DECIMAL(5,2) 10.15 |
1 2 3 4 5 6 |
例子 create table t8( name decimal(5,3) #99.999 )engine=innodb default charset=utf8; insert into t8(name)values(123456456.123); |
字符串
- varchar(n) 定长
- char(n)变长
1 2 3 4 5 6 7 8 |
CHAR(5)和VARCHAR(5)的区别 插入值 CHAR占用字节数 VARCHAR占用字节数 '' 5 1 '1' 5 2 '123' 5 4 '1234' 5 5 '12345' 5 6 |
text类型
1 2 3 4 5 6 |
类型 范围 占用空间 TINYTEXT 0~255 长度+2个字节 TEXT 0~65535 长度+2个字节 MEDIUMTEXT 0~167772150 长度+3个字节 LONGTEXT 0~4294967295 长度+4个字节 |
ENUM类型
1 2 3 4 5 6 7 8 |
又称枚举类型。 ENUM('值1','值2',...,'值n') n-代表参数列表中的第n个值,这些值末尾的空格会被系统直接删除。 ENUM类型的值只能取列表中的一个元素。 取值列表中最多能有65535成员。 列表中的每一个值都有一个顺序排列的编号,MySQL存入的是这个编号,而不是值。 |
1 2 3 4 5 6 7 8 9 |
例子 create table t9( id tinyint(4) not null primary key auto_increment, sex enum('男','女') )engine=innodb default charset=utf8; insert into t9(sex)values('man');#显示空 insert into t9(sex)values('男');#显示男 |
SET类型
1 2 3 4 |
在创建表时,SET类型的取值范围就以列表的形式指定了。 SET('值1','值2',...,'值n') SET类型的值最多只以是有64个元素构成的组合。取值可以是其中的一个或多个。其它特性,与ENUM类似。 |
1 2 3 4 5 6 7 8 9 10 |
例子 #SET类型 多选 create table t10( id tinyint(4) not null primary key auto_increment, sex set('男','女','nanan') )engine=innodb default charset=utf8; insert into t10(sex)values('男,女');#显示(男,女) |
以下 了解即可:
二进制类型
1 2 3 4 5 6 7 8 9 10 |
二进制类型是在数据库中存储二进制数据的数据类型。 类型 取值范围 BINARY(M) 字节数为M,允许长度为0~M的定长二进制字符串 VARBINARY(M) 允许长度为0~M的变长二进制字符串,字节数为值的长度加1 BIT(M) M位二进制数,M最大值为64 TINYBLOB 可变长二进制数据,最多255个字节 BLOB 可变长二进制数据,最多2e16-1个字节 MEDIUMBLOB 可变长二进制数据,最多2e24-1个字节 LONGBLOB 可变长二进制数据,最多2e32-1个字节 |
日期与时间类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
数据类型 字节数 取值范围 零值 YEAR 1 1901~2155 0000 DATE 4 1000-01-01~9999-12-31 0000:00:00 TIME 3 -838:59:59~838:59:59 00:00:00 DATETIME 8 1000-01-01 00:00:00~9999-12-31 23:59:59 0000-00-00 00:00:00 TIMESTAMP 4 19700101080001~20380119111417 00000000000000 YEAR: 超出范围就会插入0000 使用2位字符串表示,'00'~'69'转换为2000~2069,'70'~'99'转换为1970~1999 使用2位数字表示,00~69转换为2000~2069,70~99转换为1970~1999。 注意两位的数字和两位的字符串是不一样的:0-0000 '0''00'-2000 DATE: 4个字节来表示日期。以YYYY-MM-DD的形式来显示DATE类型的值。 1)'YYYY-MM-DD'或'YYYYMMDD'格式的字符串表示。 2)MySQL中还支持一些不严格的语法格式:'YYYYMMDD' 'YYYY@MM@DD' 'YYYY.MM.DD' 3)'YY-MM-DD'或'YYMMDD'格式的字符串表示。 4)YY取值同YEAR类型中的两位字符串的表示一致。 5)YYYYMMDD或YYMMDD格式的数字表示。YY取值同上。 虽然MySQL支持DATE类型的一些不严格的语法格式。但是,实际运用中,最好还是选择标准形式。日期中使用-做分隔符,时间用:做分隔符。如果有特殊需要也可以使用@、* 等特殊字符做分隔符。 使用CURRENT_DATE和NOW()转换为当前系统日期。 |
1 2 3 4 5 6 7 |
例子 create table date1( id int(11) unsigned not null primary key auto_increment, create_time TIMESTAMP not null default current_timestamp,#当前时间 #update_time TIMESTAMP not null default current_timestamp#更新的时间 ) |
1 2 3 4 5 6 7 8 9 |
查看某个表的碎片大小: SHOW TABLE STATUS LIKE '表名'; // 结果中’Data_free’列的值就是碎片大小 清除表碎片: optimize table 表名 mysql -u root -p --tee D:/mysql.log(保存所有的指令) tee d:/wamp/www/mysql.log; 登录后使用命令将操作写入文件 |