1.介绍
约束条件与数据类型的宽度一样,都是可选参数
它们的作用在于保证数据的完整性和一致性
1.1not null 与 deafult
null表示空,非字符串
deafult代表默认值
创建列时可以指定默认值,当插入数据时如果未主动设置,则自动添加默认值
create table tb1( id int not null default 2, num int not null );
效果
验证1:
id字段默认为空
create table t11(id int);
desc t11;
效果
扫描二维码关注公众号,回复:
1572990 查看本文章
给t11插入一个空值
insert into t11 values(); select * from t11;
效果
验证2
# 设置id字段不为空 create table t12(id int not null); insert into t12 values(); #插入空值,此时显示Field 'id' doesn't have a default value
效果
验证3
设置id字段有默认值(deafult)后,则无论id字段是null还是not null,都可以插入空,插入空默认填入default指定的默认值
create table t13(id int default 1); insert into t13 values(); insert into t13 values(8); insert into t13 values(9); select * from t13;
效果
练习:
create table t14( id int, name varchar(20) not null, age int(3) default 18, sex enum('男','女') default '男', fav set('吃','喝','嫖','赌') default '吃,喝' ); insert into t14(name) values('乔治'); insert into t14 values(3,'梅子',18,'女','嫖'); insert into t14 values(5,'碧落',22,'男','吃,喝,嫖,赌'); select * from t114;
此时表格结构
效果
1.2唯一性(unique)约束
# 单例唯一
# 即不可重复 create table tab2(id int unique, name char(10) ); insert into tab2 values(1,'first'); insert into tab2 values(1,'second'); # 设置了唯一性约束,此时再插入id= 1,报错 # 也可以分开写 create table tab2(id int, unique(id), name char(10) );
# 多例唯一
# 联合唯一 create table t17( id int, host varchar(50), ip varchar(50), port int, unique(id), unique(ip,port) # 这两个参数不能同时出现两次,它两组合起来是唯一的 ); insert into t17 values (1,'root','192.168.11.23',80), (2,'user','192.168.11.23',81), (3,'bac','192.168.11.24',80);
结构
效果
2.primary key(主键约束)
约束:primary key等价于not null unique,字段的值不为空且唯一
对于innodb存储引擎,一张表必须有一个主键
create table t19( id int primary key, # 或id int not null unique, name char(16) ); insert into t19 values (1,'luffy'), (2,'zoro'); insert into t19 values(1,'ronan'); # 此时会提示出错
多列做主键,也叫复合主键,和多例唯一性质等同
create table t21( id int, port int, primary key(id,port) ); insert into t21 values (1,80), (1,81);
3.auto_increment(自增约束)
约束:约束的字段为自动增长,约束的字段必须同时被key约束
create table t22( id int primary key auto_increment, name varchar(50), sex enum('male','female') default 'male' ); insert into t22(name) values ('依违'),('杜瓦'); insert into t22 values(4,'乔伊','female');
效果
结果
现在在穿插一个id为3的数据
insert into t22 values(3,'乔','male');
效果,id居然按顺序排列了