前言
最近学习MySQL数据库,我将我听课的笔记总结出来。不定期持续更新!
概述
1.什么是约束
约束是表级的强制规定。可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定约束。
2.为什么要约束
防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息。为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。
3.约束的分类
NOT NULL -- 非空约束,规定某个字段不能为空
UNIQUE -- 唯一约束,规定某个字段在整个表中是唯一的
PRIMARY KEY -- 主键(非空且唯一)约束
FOREIGN KEY -- 外键约束
CHECK -- 检查约束
DEFAULT -- 默认值约束
①非空约束
1.作用:
限定某个字段/某列的值不允许为空
2.特点:
- 默认,所有的类型的值都可以是NULL,包括INT、FLOAT等数据类型
- 非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空
- 一个表可以有很多列都分别限定了非空
- 空字符串’'不等于NULL,0也不等于NULL
3.关键字:
NOT NULL
4.添加非空约束:
- (1)建表时
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型 NOT NULL,
字段名 数据类型 NOT NULL
);
- (2)建表后
ALTER TABLE 表名称 MODIFY 字段名 数据类型 NOT NULL;
5.删除非空约束:
ALTER TABLE 表名称 MODIFY 字段名 数据类型 NULL;-- 去掉NOT NULL
或
ALTER TABLE 表名称 MODIFY 字段名 数据类型;-- 去掉NOT NULL
②唯一约束
1.作用:
用来限制某个字段/某列的值不能重复
2.特点:
- 同一个表可以有多个唯一约束。
- 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一。
- 唯一性约束允许列值为空。
- 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同。
- MySQL会给唯一约束的列上默认创建一个唯一索引。
3.关键字:
UNIQUE
4.添加唯一约束:
- (1)建表时
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型 UNIQUE,
字段名 数据类型 UNIQUE KEY,
字段名 数据类型
);
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
[CONSTRAINT 约束名] UNIQUE KEY(字段名)
);
- (2)建表后
ALTER TABLE 表名称 ADD UNIQUE KEY(字段列表);
或
ALTER TABLE 表名称 MODIFY 字段名 字段类型 UNIQUE;
③主键(非空且唯一)约束
1.作用:
用来唯一标识表中的一行记录
2.特点:
- 用来唯一标识表中的一行记录。
- 一个表最多只能有一个主键约束,建立主键约束可以在列级别创建,也可以在表级别上创建。
- 主键约束对应着表中的一列或者多列(复合主键)
- 如果是多列组合的复合主键约束,那么这些列都不允许为空值,并且组合的值不允许重复。
3.关键字:
PRIMARY KEY
4.添加主键约束:
- (1)建表时
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型 PRIMARY KEY,
字段名 数据类型
);
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
[CONSTRAINT 约束名] PRIMARY KEY(字段名)
);
- (2)建表后
ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表);
5.复合主键约束:
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
PRIMARY KEY(字段名1,字段名2) -- 表示字段1和字段2的组合是唯一的,也可以有更多个字段
);
6.删除主键约束:
ALTER TABLE 表名称 DROP PRIMARY KEY;
注意:
说明:删除主键约束,不需要指定主键名,因为一个表只有一个主键,删除主键约束后,非空还存在。
④外键约束
1.作用:
限定某个表的某个字段的引用完整性
2.特点:
- 从表的外键列,必须引用/参考主表的主键或唯一约束的列
- 在创建外键约束时,如果不给外键约束命名,默认名不是列名,而是自动产生一个外键名
- 创建(CREATE)表时就指定外键约束的话,先创建主表,再创建从表
- 删表时,先删从表(或先删除外键约束),再删除主表
3.关键字:
FOREIGN KEY
4.添加外键约束:
- (1)建表时
CREATE TABLE 主表名称(
字段1 数据类型 PRIMARY KEY,
字段2 数据类型
);
CREATE TABLE 从表名称(
字段1 数据类型 PRIMARY KEY,
字段2 数据类型,
[CONSTRAINT <外键约束名称>] FOREIGN KEY(从表的某个字段) REFERENCES 主表名(被参考字段)
);
- (2)建表后
ALTER TABLE 从表名 ADD [CONSTRAINT 约束名] FOREIGN KEY (从表的字段) REFERENCES 主表名(被引用字段) [ON UPDATE xx][ON DELETE xx];
5.删除外键约束
(1)第一步先查看约束名和删除外键约束
SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称';
ALTER TABLE 从表名 DROP FOREIGN KEY 外键约束名;
(2)第二步查看索引名和删除索引。
SHOW INDEX FROM 表名称; #查看某个表的索引名
ALTER TABLE 从表名 DROP INDEX 索引名;
⑤检查约束
1.作用:
检查某个字段的值是否符号xx要求,一般指的是值的范围
2.关键字:
CHECK
3.添加检查约束:
CREATE TABLE 主表名称(
字段1 数据类型 CHECK(范围),
字段2 数据类型
);
举例:
CREATE TABLE temp(
id INT AUTO_INCREMENT,
NAME VARCHAR(20),
age INT CHECK(age > 20),
PRIMARY KEY(id)
);
⑥默认值约束
1.作用:
给某个字段/某列指定默认值,一旦设置默认值,在插入数据时,如果此字段没有显式赋值,则赋值为默认值。
2.关键字:
DEFAULT
3.添加默认值约束:
- (1)建表时
CREATE TABLE 表名称(
字段名 数据类型 PRIMARY KET,
字段名 数据类型 UNIQUE KEY NOT NULL,
字段名 数据类型 UNIQUE KEY,
字段名 数据类型 NOT NULL DEFAULT 默认值,
);
- (2)建表后
ALTER TABLE 表名称 MODIFY 字段名 数据类型 DEFAULT 默认值;
或
ALTER TABLE 表名称 MODIFY 字段名 数据类型 DEFAULT 默认值 NOT NULL;
4.删除默认值约束:
ALTER TABLE 表名称 MODIFY 字段名 数据类型;#删除默认值约束,也不保留非空约束
或
ALTER TABLE 表名称 MODIFY 字段名 数据类型 NOT NULL; #删除默认值约束,保留非空约束
小结
以上是一些MySQL是补充的数据库约束方面的内容,这些仅仅为个人的听课笔记总结,如有错误,请及时与我联系,我会立刻改正,谢谢!
后面将会围绕MySQL数据库的相关知识点不定期持续更新,感谢你们的关注和陪伴!