文章目录
- 1、约束类型
- 1.1NOT NULL约束
- 1.2UNIQUE:唯一约束
- 1.3DEFAULT:默认值约束
- 1.4PRIMARY KEY:主键约束
- 1.5FOREIGN KEY:外键约束
- 2、表的设计
- 2.1一对一
- 2.2一对多
- 2.3多对多
1、约束类型
关键字 | 解释 |
---|---|
NOT NULL | 指示某列不能存储NULL值 |
UNIQUE | 保证某列的每行必须有唯一的值 |
DEFAULT | 规定没有给列赋值时的默认值 |
PRIMARY KEY | NOT NULL和UNIQUE的结合。确保某列(或两个列多个列的结合)有唯一标识,有助于更容易更快速地找到表中的每一个特定的记录 |
FOREIGN KEY | 保证一个表中的数据匹配另一个表中的值的参数完整性 |
1.1NOT NULL约束
创建表的时候,指定某列不能为空
create table student(id int not null,
name varchar(20) not null);
上图中的NO就表示不允许存储空值
1.2UNIQUE:唯一约束
create table student(id int unique,
name varchar(20) unique);
上述图片中用红色圈起来的地方就是加上unique约束之后,每次插入/修改都会需要先进行查询,如果发现重复(已经存在)就会插入/修改失败,加上unique之后执行效率就会降低,对数据的校验更严格,有助于写代码的时候减少出错的概率(提高开发的效率)
1.3DEFAULT:默认值约束
create table student(id int,
name varchar(20) default '无名氏');
设置好之后,后续进行指定列插入的时候,未被指定的列就会保持默认值
1.4PRIMARY KEY:主键约束
一条记录的身份标识,比较两个东西,看他俩是不是同一个,此时就可以使用身份标识来进行区分
在MySQL中主键还有具体的两个要求:
1.不能为null
2.不能重复
一般给表设置主键,都是使用数字(整数形式),很少会使用字符串
一个表只能有一个主键,一个主键不一定只针对一个列
把多个列的内容联合到一起,共同的构成一个主键叫做联合主键
create table student(id int primary key,
name varchar(20));
当某个列集合了not null和unique就成了主键
MySQL中提供了 “自增主键” 每次插入新的数据,都可以把主键基于上一条数据的主键+1
create table student(id int primary key auto_increment,
name varchar(20));
上述主键的值就不用手动指定
此处写的的null表示这一列不用手动指定
1.5FOREIGN KEY:外键约束
就是两个表之间相互约束
外键用于关联其他表的主键或唯一键,语法:
foreign key(字段名)references 主表(列);
创建班级表class,classId为主键
mysql> create table class(classId int primary key auto_increment,
className varchar(30));
创建学生表student,一个学生对应一个班级,一个班级对应多个学生
使用id为主键,classId为外键,关联班级表classId
create table student(id int primary key auto_increment,
name varchar(30),
classId int,
foreign key (classId) references class(classId));
此时,student的classId就和class表的classId建立了联系student classId中的值,就必须要在class表的classId中存在
class表,就对student表产生了制约
此时,就把class表,制约别人的表,也称为“父表”(parent table)
把student表,被制约的表,称为“子表”(child table)
外键约束和unique类似的效果,都是要在插入和删除之前,进行查询
2、表的设计
表的设计是一个比较抽象的概念,有了一定经验后,会更好理解,结合后期的项目设计,再来理解表的设计,可能会更好,这里我们简单介绍一下常见设计
2.1一对一
每个人都有身份证,每个身份证id就对应一个人,这就是一对一的关系
关于一对一的设计方案有两种
第一种方案:把身份证id和姓名放在一张表里面
第二种方案:把身份证id和姓名放在不同的表里,相互关联
2.2一对多
一个班级对应多个学生,一个学生对应一个班级
2.3多对多
比如学校的一门课程,可以被多名学生选修,而一名学生可以选修多门课程,这就是多对多的关系