约束的作用就是保证表中的数据有效
分类:
not null
(表中数据不能为NULL)unique
(约束的字段不能重复,但是可以为NULL,也就是NULL可以重复)primary key
(主键不能为NULL,同时不可以重复)foreign key
check
(Mysql不支持)联合唯一性:
设定两个字段联合起来具有唯一性的方法:(设置name和email联合唯一性限制)
mysql> create table vip(
-> id int,
-> name varchar(30),
-> email varchar(30),
-> unique(name,email)
-> );
Query OK, 0 rows affected (0.13 sec)
注意:在Mysql中,如果一个字段同时被
not null
和unique
约束,则该字段自动变为主键字段😙
联合主键约束:(id和name联合起来做主键,复合主键)
mysql> create table vip(
-> id int,
-> name varchar(30),
-> email varchar(100),
-> primary key(id,name)
-> );
Query OK, 0 rows affected (0.06 sec)
实际开发中不建议使用复合主键,主键值建议使用int,bigint,char类型,且主键值一般都是定长的
注意:对于一张表来说只要有主键和
unique
约束的,自动添加索引🥲
使用外键可以减少数据表的冗余且使之满足某一范式,但同时连接查询也会降低查询的效率
使用实例:
其中cno字段是class表的classno字段的一个外键
mysql> create table stu(
-> no int primary key auto_increment,
-> name varchar(50),
-> cno int,
-> foreign key(cno) references class(classno)
-> );
注意:外键中引用的其他表的字段不一定是要主键,但是一定要有
unique
约束😚