表的约束
- 约束是在表上强制执行的数据校验规则.
- 约束主要用于保证数据库的完整性。
- 当表中数据有相互依赖性时,可以保护相关的数据不被删除
- 大部分数据库支持下面五类完整性约束:
NOT NULL 非空
UNIQUE Key 唯一键
PRIMARY KEY 主键
FOREIGN KEY 外键
CHECK 检查
约束作为数据库对象,存放在系统表中,也有自己的名字 创建约束的时机 在建表的同时创建 建表后创建(修改表) 可定义列级或表级约束 有单列约束和多列约束
定义约束的语法
1、非空约束(NOT NULL) 列级约束
只能使用列级约束语法定义, 确保字段值不允许为空,只能在字段级【VARCHAR()】定义
create table tb_student(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18) NOT NULL
) ;
所有数据类型的值都可以是NULL。 空字符串不等于NULL。 0也不等于NULL。
2、唯一约束
唯一性约束条件确保所在的字段或者字段组合不出现重复值
唯一性约束条件的字段允许出现多个NULL 同一张表内可建多个唯一约束
唯一约束可由多列组合而成 建唯一约束时MySQL会为之建立对应的索引。
如果不给唯一约束起名,该唯一约束默认与列名相同
CREATE TABLE tb_student1(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18) UNIQUE NOT NULL
);
3、主键约束PRIMARY KEY
主键从功能上看相当于非空且唯一
一个表中只允许一个主键
主键是表中唯一确定一行数据的字段
主键字段可以是单字段或者是多字段的组合
当建立主键约束时,MySQL为主键创建对应的索引 主键约束名总为PRIMARY。
CREATE TABLE tb_student2(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(18)
);
4、外键约束
外键是构建于一个表的两个字段或者两个表的两个字段之间的关系
外键确保了相关的两个字段的两个关系: 子(从)表外键列的值必须在主表参照列值的范围内,或者为空(也可以加非空约束,强制不允许为空)。
当主表的记录被子表参照时,主表记录不允许被删除。
外键参照的只能是主表主键或者唯一键,保证子表记录可以准确定位到被参照的记录。
格式
FOREIGN KEY (外键列名)REFERENCES 主表(参照列)
CREATE TABLE tb_dept(
dept_id INT PRIMARY KEY,
NAME VARCHAR(18),
description VARCHAR(255)
);
CREATE TABLE tb_employee(
employee_id INT PRIMARY KEY,
NAME VARCHAR(18),
gender VARCHAR(10),
dept_id INT,
address VARCHAR(255),
FOREIGN KEY(dept_id) REFEREnces tb_dept(dept_id)
);
删除表的约束
- 删除NOT NULL约束: alter table 表名 modify 列名 类型;
- 删除UNIQUE约束 :alter table 表名 drop index 惟一约束名;
- 删除PRIMARY KEY约束: alter table 表名 drop primary key;
- 删除FOREIGN KEY约束: alter table 表名 drop foreign key 外键名;