目录
- 约束条件
- 1、unsigned
- 2、zerofill
- 3、not null
- 4、default
- 5、unique
- 6、primary key
- 7、auto_increment
- 主键自增特性:
约束条件
定义:约束条件相当于是在字段类型之上添加的额外约束(条件)
1、unsigned
作用: 使整型范围无正负号
关键字:unsigned
实例:
create table t1(id int unsigned);
2、zerofill
作用 :不够位数使用0填充
关键字:zerofill
实例 :
create table t1(id int(8) unsigned zerofill);
insert into t1 values(2222);
3、not null
作用 : not null :非空(不能为空)
关键字:not null
实例:
正常添加:
create table t4(id int,name varcher(16));
insert into t4 values(name) values('gary'); # 只指定给name字段添加数据
# 结果:id位NULL
create table t4(id int not null,name varcher(16)); # 限制id不能为空
insert into t4 values(name) values('gary'); # 只给name字段添加数据
4、default
作用:默认值(用户给了数据就用用户的,用户不给就用默认的)
关键字 :default
实例:
create table t6(id int,name varchar(16) default '匿名用户');
insert into t6 values(1,'gary'); # 正常传值
insert into t6(id) values(2); # 只给id传值则name字段使用默认值
5、unique
作用:唯一(保证字段(一个或多个)在整个表中没有重复的数据)
关键字:unique
unique分为单列唯一和多列唯一。
# 单列唯一:只控制单列不能重复
实例:
create table t7(id int,name varchar(16) unique);
insert into t7 values(1,'gary')(2,'gary');
# 多列唯一(联合唯一):控制多列结合不能重复
实例:ip加端口唯一
创建表:
create table t8(
id int,
host varchar(32) comment 'ip地址',
port varchar(32) comment '端口',
unique(host,port)
);
添加数据:
insert into t8 values(1,'127.0.0.1','3306'),
(2,'127.0.0.1','3307'),
(3,'127.0.0.2','3306');
# 不报错:只要host和port字段结合不重复可以存储
6、primary key
作用:
1、单从约束条件上而言主键相当于not null + unique(非空且唯一)
2、主键的功能目前简单的理解为能够加快数据的查询速度相当于书的目录
3、InnoDB存储引擎规定每张表都必须有且只有一个主键
3.1 如果表中没有任何的主键和其他约束条件
InnoDB默认会采用一个隐藏字段作为表的主键
3.2 如果表中没有主键但是有not null + unique(非空且唯一的字段)
InnoDB会自动将该字段升级为主键
结论:每张表都必须要有一个'id'字段(序号字段)并且该字段就是主键(通常在第一列)
关键字:primary key
可分为单列主键和多列主键(联合主键)
实例验证:
单列主键:验证非空且唯一
create table t9(
id int primary key,
name varchar(32)
);
insert into t9(name) values('gary'); # 报错
insert into t9 values(1,'gary'),(2,'tom'); # 报错
单列主键:验证not null + unique 是否自动升级为主键
create table t10(
id int not null unique,
age int not null unique,
phone bigint not null unique,
num int not null unique
);
多列主键(联合主键):两个字段联合起来是一个主键(不常用)
create table t11(
id int,
age int,
name varchar(16),
primary key(id,age)
);
7、auto_increment
作用:自增(专门配合主键一起使用的 让主键能够自增)
关键字:auto_increment
实例:
创建表:
create table t12(
id int primary key auto_increment,
name varchar(32)
);
存储数据:
insert into t12(name) values('tom'),('kaka'),('jack'),('gary');
# 这样我们在存储数据的时候就不需要考虑是第几个id编号了。
主键自增特性:
主键的自增是不会收到delete from删除操作的影响
如果删除某一个字段的话他还是保持原来的自增顺序依次自增。
比如:
删除3字段,那么4字段就会填充到3字段的位置,再来数据就是以5字段开始
truncate关键字既可以清空表数据也会重置主键值(但是这个没必要,一般不会重置数据,如果重置重新创建一个表就好了)
eg:truncate t1; (清空t1表的数据并且重置主键)