createtable t2(
id intnotnull,
name varchar(11));insertinto t2 values(1,"steven");insertinto t2 values(null,"steven");# errorinsertinto t2(name)values("steven");# error
zerofill : 零填充 (配合int使用,不够5位拿0来填充)
createtable t3(id int(5) zerofill);insertinto t3 values(1234567);insertinto t3 values(12);
default : 默认值
createtable t4(
id int,
name char(16),
gender enum('male','female','others')default'male');insertinto t4(id,name)values(1,'steven');insertinto t4 values(2,'kevin','female');
unique : 唯一值
# 单列唯一createtable t5(
id intunique,
name char(16));insertinto t5 values(1,'steven'),(1,'kevin'); 报错
insertinto t5 values(1,'steven'),(2,'kevin');# 联合唯一"""
ip和port
单个都可以重复 但是加载一起必须是唯一的
"""createtable t6(
id int,
ip char(16),
port int,unique(ip,port));insertinto t6 values(1,'127.0.0.1',8080);insertinto t6 values(2,'127.0.0.1',8081);insertinto t6 values(3,'127.0.0.2',8080);insertinto t6 values(4,'127.0.0.1',8080); 报错
primary key : 主键
1.单单从约束效果上来看primarykey等价于notnull+unique, 非空且唯一!!!
createtable t7(id intprimarykey);insertinto t7 values(null); 报错
insertinto t7 values(1),(1); 报错
insertinto t7 values(1),(2);2.它除了有约束效果之外 它还是Innodb存储引擎组织数据的依据
Innodb存储引擎在创建表的时候必须要有primarykey
因为它类似于书的目录 能够帮助提示查询效率并且也是建表的依据
# 1 一张表中有且只有一个主键 如果你没有设置主键 那么会从上往下搜索直到遇到一个非空且唯一的字段将它自动升级为主键createtable t8(
id int,
name char(16),
age intnotnullunique,
addr char(32)notnullunique);# 2 如果表中没有主键也没有其他任何的非空且唯一字段 那么Innodb会采用自己内部提供的一个隐藏字段作为主键,# 隐藏意味着你无法使用到它 就无法提示查询速度# 3 一张表中通常都应该有一个主键字段 并且通常将id/uid/sid字段作为主键# 单个字段主键createtable t9(
id intprimarykey
name char(16));# 联合主键(多个字段联合起来作为表的主键 本质还是一个主键)createtable t10(
ip char(16),
port int,primarykey(ip,port));
注: 也意味着 以后我们在创建表的时候id字段一定要加primarykey
auto_increment : 自增
# 当编号特别多的时候 人为的去维护太麻烦createtable t11(
id intprimarykeyauto_increment,
name char(16));insertinto t11(name)values('steven'),('kevin'),('jack');# 注意auto_increment通常都是加在主键上的 不能给普通字段加createtable t12(
id intprimarykeyauto_increment,
name char(16),
cid intauto_increment);
ERROR 1075(42000): Incorrect table definition; there can be only one auto columnand it must be defined as a key
注:
以后在创建表的id(数据的唯一标识id、uid、sid)字段的时候
id intprimarykeyauto_incrementdeletefrom t1 # 删除表中数据后 主键的自增不会停止truncate t1 # 清空表数据并且重置主键