数据完整性
- 实体完整性
- 主键(主码):唯一且非空
- create table test1
(n1 int,
n2 int,
n3 int);
允许出现重复元组
- 创建 test2,并将n1设为主键
//约束的列级形式
Create table test2
(n1 int primary key,
n2 int,
n3 int);
创建主键后,DBMS会自动创建索引
- 创建 test3,并将n1,n2设为主键
//约束的表级形式
Create table test3
(n1 int,
n2 int,
n3 int,
primary key(n1, n2));
- 给test1表添加主键
Alter table test1
Add 主键的表级形式
- 唯一约束(Unique):唯一。唯一约束的用法与主键相同,只需将关键词换成Unique。当创建唯一约束时,系统会自动创建索引
- 创建 test4,并要求n1和n2的组合值唯一
Create table test4
(n1 int
n2 int,
n3 int,
Unique(n1, n2));
- 给test1的n2属性定义唯一约束
Alter table test1
Add 唯一的表级形式
- 唯一索引
Create index 索引名 on 表名(属性名列表)
- 自增属性
- 参照完整性
- 员工表的dept_id属性引用部门表的id属性
Alter table 表名
Add 外键的表级形式
alter table emp add FOREIGN key (dept_id) REFERENCES dept(id);
- 列级形式
create table emp0
(id int,
dept_id int FOREIGN KEY REFERENCES dept(id) ,
salary NUMERIC(5,2));
- 当创建外键后,被参照表的删除、修改受限制,添加不受限;参照表的修改、添加受限,删除不受限
create table emp0
(id int,
dept_id smallint,
FOREIGN KEY (dept_id) REFERENCES dept(id)
On delete cascade
On update cascade ,
salary NUMERIC(5,2));
- 用户定义完整性
- 触发器
- Enum,Set
- Check(mysql 8.0.16版本之前无效)
- Check(条件表达式),条件表达式的写法与查询相同。
create table stu
(name varchar(10),
sex varchar(1) check(sex in ('男','女')),
birth datetime,
join_date datetime);
alter table stu
add check(name like '张%');
- 约束名的定义
Constraint 约束名 约束定义
Constraint pk_emp primary key(id)
Constraint fk_emp foreign key (dept_id) references dept(id)
- 删除约束
Alter table 表名
Drop Constraint 约束名
--MySql
--删主键
Alter table 表名
Drop Primary Key
--删唯一约束
Alter table 表名
Drop index 约束名
--删外键
Alter table 表名
Drop Foreign Key 约束名数据完整性
- 实体完整性
- 主键(主码):唯一且非空
- create table test1
(n1 int,
n2 int,
n3 int);
允许出现重复元组
- 创建 test2,并将n1设为主键
//约束的列级形式
Create table test2
(n1 int primary key,
n2 int,
n3 int);
创建主键后,DBMS会自动创建索引
- 创建 test3,并将n1,n2设为主键
//约束的表级形式
Create table test3
(n1 int,
n2 int,
n3 int,
primary key(n1, n2));
- 给test1表添加主键
Alter table test1
Add 主键的表级形式
- 唯一约束(Unique):唯一。唯一约束的用法与主键相同,只需将关键词换成Unique。当创建唯一约束时,系统会自动创建索引
- 创建 test4,并要求n1和n2的组合值唯一
Create table test4
(n1 int
n2 int,
n3 int,
Unique(n1, n2));
- 给test1的n2属性定义唯一约束
Alter table test1
Add 唯一的表级形式
- 唯一索引
Create index 索引名 on 表名(属性名列表)
- 自增属性
- 参照完整性
- 员工表的dept_id属性引用部门表的id属性
Alter table 表名
Add 外键的表级形式
alter table emp add FOREIGN key (dept_id) REFERENCES dept(id);
- 列级形式
create table emp0
(id int,
dept_id int FOREIGN KEY REFERENCES dept(id) ,
salary NUMERIC(5,2));
- 当创建外键后,被参照表的删除、修改受限制,添加不受限;参照表的修改、添加受限,删除不受限
create table emp0
(id int,
dept_id smallint,
FOREIGN KEY (dept_id) REFERENCES dept(id)
On delete cascade
On update cascade ,
salary NUMERIC(5,2));
- 用户定义完整性
- 触发器
- Enum,Set
- Check(mysql 8.0.16版本之前无效)
- Check(条件表达式),条件表达式的写法与查询相同。
create table stu
(name varchar(10),
sex varchar(1) check(sex in ('男','女')),
birth datetime,
join_date datetime);
alter table stu
add check(name like '张%');
- 约束名的定义
Constraint 约束名 约束定义
Constraint pk_emp primary key(id)
Constraint fk_emp foreign key (dept_id) references dept(id)
- 删除约束
Alter table 表名
Drop Constraint 约束名
--MySql
--删主键
Alter table 表名
Drop Primary Key
--删唯一约束
Alter table 表名
Drop index 约束名
--删外键
Alter table 表名
Drop Foreign Key 约束名