MySQL 基础篇 六【约束】

一、什么是约束

为了保证数据的一致性和完整性,SQL规范以约 束的方式对表数据进行额外的条件限制。

• 约束是表级的强制规定

• 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句)

二、常见约束

有以下六种约束:

– NOT NULL 非空约束,规定某个字段不能为空

– UNIQUE 唯一约束,规定某个字段在整个表中是唯一的

– PRIMARY KEY 主键(非空且唯一)

– FOREIGN KEY 外键

– CHECK 检查约束

– DEFAULT 默认值

注意: MySQL不支持check约束,但可以使用check约束,没有任何效果。

扫描二维码关注公众号,回复: 12813482 查看本文章

根据约束数据列的限制,约束可分为:

– 单列约束:每个约束只约束一列

– 多列约束:每个约束可约束多列数据

•根据约束的作用范围,约束可分为:

– 列级约束只能作用在一个列上,跟在列的定义后面

– 表级约束可以作用在多个列上,不与列一起,而是单独定义

常见约束
一种限制,用于限制表中的数据,为了保证表中的数据的准确和可靠性
CREATE TABLE 表名(
字段名 字段类型 约束
)

分类
六大约束
NOT NULL 非空约束 保证该字段的值不能为空
比如姓名 学号

DEFAULT 默认约束 用于保证该字段有默认值
比如性别

PRIMARY KEY 主键约束 用于保证该字段的值具有非空 唯一性
比如学号

UNIQUE :唯一,用于保证该字段的值具有唯一性,可以为空
比如座位号 也可以为空

CHECK 检查约束 MySQL中不支持,虽然语法没错
性别只能是男或者女 那么添加的数据只能是二者之一 不然无法添加

FOREIGN KEY 外键约束 用于限制两个表的关系,用于保证该字段的值必须来自于
主表关联列的值

比如
表一:学生信息表里有一个专业列
表二:专业信息表 假如只有两个专业 1 Java 2 h5
那么表一中的专业列号只能是1或者2,来自于专业信息表
这个约束就叫做外键约束,一般添加在从表(学生信息表)中,
引用主表(专业信息表)中某列的值。

比如:专业编号,员工表的部门编号,工种编号,都可添加外键约束。

添加约束时机:
1.创建表时
2.修改表时

约束的添加分类:
1.列级约束
创建表时,写在:
字段名 字段类型 列级约束;
六大约束语法上都没问题,但外键约束无效果

2.表级约束
在写完列后,最后加上:
表级约束
不支持非空和默认

三、创建表时添加列级约束

1.添加列级约束
CREATE TABLE stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1) CHECK(gender = '男' OR gender = '女'),
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT REFERENCES major(id)
);

CREATE TABLE major(
id INT PRIMARY KEY,
majorName VARCHAR(20)
);

SELECT * FROM stuinfo;

语法:直接在字段名和类型后面追加约束类型即可。
只支持默认 非空 主键和唯一

四、创建表时添加表级约束

2.添加表级约束
DROP TABLE IF EXISTS stuinfo;

VARCHAR:可变长 CHAR:定长
CREATE TABLE stuinfo(
id INT,
stuname VARCHAR(20),
gender CHAR(1),
seat INT,
age INT,
majorid INT,

CONSTRAINT pk PRIMARY KEY(id),#主键
CONSTRAINT uq UNIQUE(seat),
CONSTRAINT ck CHECK(gender = '男' OR gender = '女'),
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorid) REFERENCES major(id)
)

SHOW INDEX FROM stuinfo;

语法:
【constraint 约束名】

通用写法:
CREATE TABLE IF EXISTS stuinfo(
id INT PRIMARY KEY,
stuName VARCHAR(20) NOT NULL,
gender CHAR(1),
seat INT UNIQUE,
age INT DEFAULT 18,
majorId INT,
CONSTRAINT fk_stuinfo_major FOREIGN KEY(majorId) REFERENCES major(id)
)

五、主键和唯一的对比

1、都可保证唯一性

2、主键不允许为空

3、主键在一个表中至多有一个,而唯一可以有多个

4、都允许组合,但不推荐

比如说一个学生表,含有学号,学号就是主键。

每个优秀的学生可以分配一对一导师。

还有一栏为导师ID

拥有导师的学生则有导师ID,且互不相同;

当然有些学生也可以没有导师ID

六、外键

1、要求在从表设置外键关系

2、从表的外键列的类型和主表的关联列的类型要求一致

3、主表的关联列必须是一个key 一般是主键或唯一

4、插入数据时,先插入主表,再插入从表

5、删除数据时,先删除从表,再删除主表

猜你喜欢

转载自blog.csdn.net/Kukeoo/article/details/114275183
今日推荐