唯一性索引,一个表中可以有多个字段时唯一性的(unique)。
一个表只能有一个主键,且不能为空。
外键约束。
完整性约束条件。保证数据的完整性和一致性。
显示宽度
如果数据大于该字段数据类型所能表示的最大范围则发生截断。
显示宽度只有配合上零填充才能显示出效果。
--零填充测试
CREATE TABLE test_int1(
a TINYINT ZEROFILL,
b SMALLINT ZEROFILL,
c MEDIUMINT ZEROFILL,
d INT ZEROFILL,
e BIGINT ZEROFILL
);
查看表结构
有了零填充,字段会自动加上无符号的属性。
浮点数(小数):float(M,D)M代表总长度,D代表浮点数占用的位数。
double(M,D)
decimal[(M,D)]内部以字符串形式存储数据的。
float、doubles在发生输入数据浮点数位数超过D时,自动进行四舍五入,但是decimal会产生警告。
CREATE TABLE test_float1(
a FLOAT,
b DOUBLE,
c DECIMAL
);
不指定小数的位数,默认对小数部分进行四舍五入。
decimal精度高,适合处理精度高的。
char时定长0-255
varchar变长0-65535
char比较浪费空间。
char类型的检索速度比varchar快。以时间换空间
varchar里有一个字节记录存了多长的字符串。
CREATE TABLE test_str(
a CHAR(5),
b VARCHAR(5)
);
可以在当前会话中设置sql模式(暂时),修改配置文件(永久有效)。
select concat()
char类型的效率要高于varchar。char相当于那空间换时间,varchar是那时间换空间。char默认存储时,后面会用空格填充到指定的长度,而在检索的时候会去掉后面的空格,varchar在保存的时候不进行填充,尾部的空格会留下。
存储的长度大于255只能选择varchar或text。
text特殊的字符串类型。
text列不能有默认值。
--测试text不能有默认值。
CREATE TABLE test_str1(
content TEXT DEFAULT 'THIS IS A TEST'
);
检索过程中不存在大小写转换(区分大小写)
ENUM:列出值,有序号按序号存,保存的编号,不是值。
列举出来的值。
--测试枚举类型
可以为空。
只能从列举出来的值中选择。
枚举类型会自动去除枚举值中的空格。
集合类型,
枚举类型只能从列表中的值中选一个,集合可选多个。
--测试集合set
CREATE TABLE test_set(
a SET('A','B','C','D','E','F')
);
INSERT test_set(a)VALUES('A');
INSERT test_set(a)VALUES('C');
INSERT test_set(a)VALUES('C,D,E');
INSERT test_set(a)VALUES('C,F,A');
会自动进行排序。
--HH:MM:SS[D HH:MM:SS](TIME时间类型)D表示天数0~34
CREATE TABLE test_time(
a TIME
);
data类型用3字节表示。
--测试data类型(YYYY-MM-DD YYYYMMDD)
CREATE TABLE test_date(
a DATE
);
可以任意指定分隔符
--79~99转换成1970~1999 00~69转换成2000~2069