一、数据库约束
1、not null
不能为空的约束,比如在学生表当中,学生的学号,姓名就不能为空。
使用演示:
create table student1(id int not null,name varchar(20) not null);
2、unique
表示唯一约束,比如在学生表当中,学生的学号是惟一的,不能有两个学生的学号相同。
使用演示:
create table student2(id int not null unique,name varchar(20) not null);
3、primary key
主键约束,主键约束就是不能为空,并且是惟一的,也就是含有前两个约束条件,在上述市里的student2表中,对id进行not null 和unique约束后,在查看表结构时,就出现id是primary key的结果。
在一张表中只能有一个字段为主键。
使用演示:
create table student3(id int primary key,name varchar(20) not null);
与student2的表结构相同。
4、auto_increment
主键自动增长约束,例如在插入数据时,未插入主键,则就在已插入元组的主键+1,作为新插入元组的主键,主要针对整型类型的主键,默认从一开始。
使用演示:
create table student9(id int primary key auto_increment,name varchar(20));
5、default
默认约束,通常在插入数据时,如果对某一字段没有赋值就默认为null,但是在使用default约束后,默认就是所设置的值。
使用演示:
create table student4(id int primary key,name varchar(20) default "无名氏");
插入一个名字为空的学生信息:
此时默认的名字不再是null,而是无名氏。
6、foreign key
foreign key(参照字段) references 被参照表名(被参照字段);
外键约束,就是一个表的某字段需要参照另一个表中的某一字段,例如:在学生表和班级表中,学生表中的班级就要参照班级表中的班级号。
使用演示:
create table class(id int primary key,number int not null); create table student(id int primary key,name varchar(20) not null,class int ,foreign key(class) references class(id));
注意:
- 在使用外键约束时,参照字段的数值类型和被参照字段的数值类型要一致。
- 在删除被参照表的某一元组时,若参照表中有元组依赖被参照字段的值时,就无法成功删除。就比如说学生表中有2班的学生,class表在删除2班这一元组时,就无法删除。
- 参照字段的取值范围就是被参照字段的值。
7、check
check约束主要是插入元组时,对范围进行约束,例如在插入学生分数时,分数不能超过100 ,就可以写成如下所示:
create table student2(id int primary key,name varchar(20) not null,score int,check(score<=100));
但是 MySQL8之前的版本会忽略check约束,也就是不生效 。
二、插入数据
可以使用select语句的查询结果作为insert的数据进行插入。一般情况下select得到的就是插入表的外键。
这是student表和class表的结构:
例如将查询class表中的所有的id作为数据插入到student表中:
三、设计表
在实际应用过程中通常是在复杂的关系中设计表,需要分析表结构,表之间常见关系有一对一、一对多、多对多。
1、一对一
比如每个班级的班长是唯一的,一个班级只有一个班长,一个班长只能服务一个班级。
2、一对多
一个班级拥有多个学生,多个学生在一个班级。
3、多对多
比如课程和学生之间就是多对多的关系。一门课程对应多个学生,一个学生有多门课程。
在多对多关系中,一般需要建立三个表来进行联系。
对于学生和课程来说,需要建立学生表、课程表、分数表:
学生表:
create table student(id int primary key auto_increment,name varchar(20) not null,sex varchar(2) not null);
课程表:
create table course(id int primary key auto_increment,name varchar(20) not null);
分数表:
create table score(student_id int,course_id int,score double(3,1), foreign key(student_id) references student(id), foreign key(course_id) references course(id));
MySQL表的进阶知识(下):https://developer.aliyun.com/article/1520466