如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
数据表的数据列的属性
1.unsigned 无符号数值
2.zerofill 零填充
3.auto_increment 自增
4.null 建立字段默认为允许为空
5.not null 不允许为空 配合default来使用
6.default 默认值 如果建立字段
例子
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;
数据类型
整数类型
# -----整数-----
整数类型 字节数 无符号范围 有符号的范围
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
例子
create table t3(
id tinyint (4),
tel int (11),
username varchar(20)
)engine=innodb default charset=utf8;
#加数据
insert into t3(tel)values(123456789);
浮点类型
浮点类型 字节数 负数的取值范围 非负数的取值范围
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
例子
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)变长
CHAR(5)和VARCHAR(5)的区别
插入值 CHAR占用字节数 VARCHAR占用字节数
'' 5 1
'1' 5 2
'123' 5 4
'1234' 5 5
'12345' 5 6
text类型
类型 范围 占用空间
TINYTEXT 0~255 长度+2个字节
TEXT 0~65535 长度+2个字节
MEDIUMTEXT 0~167772150 长度+3个字节
LONGTEXT 0~4294967295 长度+4个字节
ENUM类型
又称枚举类型。
ENUM('值1','值2',...,'值n')
n-代表参数列表中的第n个值,这些值末尾的空格会被系统直接删除。
ENUM类型的值只能取列表中的一个元素。
取值列表中最多能有65535成员。
列表中的每一个值都有一个顺序排列的编号,MySQL存入的是这个编号,而不是值。
例子
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类型
在创建表时,SET类型的取值范围就以列表的形式指定了。
SET('值1','值2',...,'值n')
SET类型的值最多只以是有64个元素构成的组合。取值可以是其中的一个或多个。其它特性,与ENUM类似。
例子
#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('男,女');#显示(男,女)
以下 了解即可:
二进制类型
二进制类型是在数据库中存储二进制数据的数据类型。
类型 取值范围
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个字节
日期与时间类型
数据类型 字节数 取值范围 零值
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()转换为当前系统日期。
例子
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#更新的时间
)
查看某个表的碎片大小:
SHOW TABLE STATUS LIKE '表名';
// 结果中’Data_free’列的值就是碎片大小
清除表碎片:
optimize table 表名
mysql -u root -p --tee D:/mysql.log(保存所有的指令)
tee d:/wamp/www/mysql.log; 登录后使用命令将操作写入文件