1.约束类型
- not null :指示某列不能存储null值
- unique:某一列数据都不能重复
- default:规定没有给列赋值时的默认值
- primary key:not null 和 unique 的结合,确保其列有唯一标识
- foreign key:保证一个表中的数据匹配到另一个表中的值的参照完整性
2.NULL约束
mysql> create table student(
-> id int not null,
-> sn int,
-> name varchar(20),
-> qq_mail varchar(20)
-> );
Query OK, 0 rows affected (0.09 sec)
创建了student表时,指定了id列不为空。
3.unique:唯一约束
mysql> create table student(
-> id int not null,
-> sn int unique,
-> name varchar(20),
-> qq_mail varchar(20)
-> );
Query OK, 0 rows affected (0.09 sec)
在student表中,对学生学号进行唯一约束,跟咱们日常生活中的学号是一样的,是不会有重复的。
4.default:默认值约束
mysql> drop table if exists student;
Query OK, 0 rows affected (0.03 sec)
mysql> create table student(
-> id int not null,
-> sn int unique,
-> name varchar(20) default 'unkown',
-> qq_mail varchar(20)
-> );
Query OK, 0 rows affected (0.14 sec)
指定插入数据时,name列为空,默认值unkown.
5.primary key:主键约束
非空唯一
unique 和 not null 的合集,可以使用在多列上,表示复合主键。
mysql> drop table if exists student;
Query OK, 0 rows affected (0.05 sec)
mysql> create table student(
-> id int not null primary key,
-> sn int unique,
-> name varchar(20) default 'unkown',
-> qq_mail varchar(20)
-> );
Query OK, 0 rows affected (0.08 sec)
一般情况下,对于整数类型的主键,常搭配自增长auto_increment来使用。插入数据对应字段不给值时,使用最大值+1,默认从1开始
id int primary key auto_increment,
6.foreign key:外键约束
外键用来关联其他表的主键或唯一值
语法:foreign key (字段名) references 主表(列)
mysql> drop table if exists classes;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> create table classes(
-> id int primary key auto_increment,
-> name varchar(20),
-> -- 使用MySQL关键字作为字段时,要用"``"来标识
-> `desc` varchar(100)
-> );
Query OK, 0 rows affected (0.09 sec)
创建了班级表,一个学生对应一个班级,一个班级对应多个学生。使用id为主键,classes_id为外键,进行关联。
mysql> drop table if exists student;
Query OK, 0 rows affected (0.05 sec)
mysql> create table student(
-> id int primary key auto_increment,
-> sn int unique,
-> name varchar(20) default 'unkown',
-> qq_mail varchar(20),
-> classes_id int,
-> foreign key (classes_id) references classes(id)
-> );
Query OK, 0 rows affected (0.08 sec)
表于表之间的联系如下图所示