最近学习MySQL数据库,我将我听课的笔记总结出来。不定期持续更新!
约束是表级的强制规定。可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后通过 ALTER TABLE 语句规定约束。
防止数据库中存在不符合语义规定的数据和防止因错误信息的输入输出造成无效操作或错误信息。为了保证数据的完整性,SQL规范以约束的方式对表数据进行额外的条件限制。
NOT NULL -- 非空约束,规定某个字段不能为空
UNIQUE -- 唯一约束,规定某个字段在整个表中是唯一的
PRIMARY KEY -- 主键(非空且唯一)约束
FOREIGN KEY -- 外键约束
CHECK -- 检查约束
DEFAULT -- 默认值约束
1.作用:
限定某个字段/某列的值不允许为空
2.特点:
3.关键字:
NOT NULL
4.添加非空约束:
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型 NOT NULL,
字段名 数据类型 NOT NULL
);
ALTER TABLE 表名称 MODIFY 字段名 数据类型 NOT NULL;
5.删除非空约束:
ALTER TABLE 表名称 MODIFY 字段名 数据类型 NULL;-- 去掉NOT NULL
或
ALTER TABLE 表名称 MODIFY 字段名 数据类型;-- 去掉NOT NULL
1.作用:
用来限制某个字段/某列的值不能重复
2.特点:
3.关键字:
UNIQUE
4.添加唯一约束:
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型 UNIQUE,
字段名 数据类型 UNIQUE KEY,
字段名 数据类型
);
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
[CONSTRAINT 约束名] UNIQUE KEY(字段名)
);
ALTER TABLE 表名称 ADD UNIQUE KEY(字段列表);
或
ALTER TABLE 表名称 MODIFY 字段名 字段类型 UNIQUE;
1.作用:
用来唯一标识表中的一行记录
2.特点:
3.关键字:
PRIMARY KEY
4.添加主键约束:
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型 PRIMARY KEY,
字段名 数据类型
);
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
[CONSTRAINT 约束名] PRIMARY KEY(字段名)
);
ALTER TABLE 表名称 ADD PRIMARY KEY(字段列表);
5.复合主键约束:
CREATE TABLE 表名称(
字段名 数据类型,
字段名 数据类型,
字段名 数据类型,
PRIMARY KEY(字段名1,字段名2) -- 表示字段1和字段2的组合是唯一的,也可以有更多个字段
);
6.删除主键约束:
ALTER TABLE 表名称 DROP PRIMARY KEY;
注意:
说明:删除主键约束,不需要指定主键名,因为一个表只有一个主键,删除主键约束后,非空还存在。
1.作用:
限定某个表的某个字段的引用完整性
2.特点:
3.关键字:
FOREIGN KEY
4.添加外键约束:
CREATE TABLE 主表名称(
字段1 数据类型 PRIMARY KEY,
字段2 数据类型
);
CREATE TABLE 从表名称(
字段1 数据类型 PRIMARY KEY,
字段2 数据类型,
[CONSTRAINT <外键约束名称>] FOREIGN KEY(从表的某个字段) REFERENCES 主表名(被参考字段)
);
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.添加默认值约束:
CREATE TABLE 表名称(
字段名 数据类型 PRIMARY KET,
字段名 数据类型 UNIQUE KEY NOT NULL,
字段名 数据类型 UNIQUE KEY,
字段名 数据类型 NOT NULL DEFAULT 默认值,
);
ALTER TABLE 表名称 MODIFY 字段名 数据类型 DEFAULT 默认值;
或
ALTER TABLE 表名称 MODIFY 字段名 数据类型 DEFAULT 默认值 NOT NULL;
4.删除默认值约束:
ALTER TABLE 表名称 MODIFY 字段名 数据类型;#删除默认值约束,也不保留非空约束
或
ALTER TABLE 表名称 MODIFY 字段名 数据类型 NOT NULL; #删除默认值约束,保留非空约束
以上是一些MySQL是补充的数据库约束方面的内容,这些仅仅为个人的听课笔记总结,如有错误,请及时与我联系,我会立刻改正,谢谢!
后面将会围绕MySQL数据库的相关知识点不定期持续更新,感谢你们的关注和陪伴!