数据库系统-完整性约束

数据库系统-完整性约束

参考csdn

列级约束和表级约束

1
2
3
4
(1)对一个数据列建立的约束,称为列级约束
(2)对多个数据列建立的约束,称为表级约束
(3)列级约束既可以在列定义时声明,也可以在列定以后声明
(4)表级约束只能在列定义后声明
1
域完整性,实体完整性,参照完整性是关系模型中必须满足的完整性约束条件

实体完整性

1
2
3
4
5
主键约束(PRIMARY KEY):确保每条记录的唯一性,主键字段必须是唯一的且不为空。可以是单个字段,也可以是多个字段的组合。

唯一约束(UNIQUE):确保某个字段的值在整个表中是唯一的。

自动增长约束(AUTO_INCREMENT):通常与主键一起使用,确保主键字段在新记录插入时自动增加。

主键约束

1
2
3
4
唯一且不为空
主键可以由一个字段组成,也可以由多个字段组成
如果主键可以由一个字段组成既可以添加到列级也可以添加到表级
如果由多个字段组成只能添加到表级
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
create table 表名(
字段名 字段类型 primary key
);

create table 表名(
字段名1 字段类型1,
字段名2 字段类型2,
.....
字段名n 字段类型n,
[constraint 主键约束名] primary key(字段名)
);

多个字段作为主键,只能添加到表级:
create table 表名(
字段名1 字段类型1,
字段名2 字段类型2,
.....
字段名n 字段类型n,
[constraint 主键约束名] primary key(字段名1,字段名2)
);
1
2
3
4
给已有表添加主键:
alter table 表名 add [constraint 主键约束名] primary key(字段名);
删除主键约束:
alter table student4 drop primary key;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
create table student1(
id int(8) primary key,
name varchar(20),
age int(2),
sex varchar(1)
);

create table student2(
id int(8),
name varchar(20),
age int(2),
sex varchar(1),
constraint pk_student2 primary key(id)
);

create table student3(
school varchar(20),
id int(8),
name varchar(20),
age int(2),
sex varchar(1),
constraint pk_student3 primary key(school, id)
);

唯一约束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
create table 表名(
字段名1 字段类型1 unique,
字段名2 字段类型2,
.....
字段名n 字段类型n
);

表级添加唯一约束:
create table 表名(
字段名1 字段类型1 unique,
字段名2 字段类型2,
.....
字段名n 字段类型n,
[constraint 唯一约束名] unique(字段1,字段2...))

alter table 表名 add [constraint 唯一约束名] unique(字段1,字段2...);
1
2
3
4
5
6
alter table 表名 drop index 唯一约束名;

注意:
如果单个字段没有指定唯一约束名,则默认的唯一约束名为字段名。
如果是多个字段组合为唯一约束时候,默认的唯一约束名为第一个字段的名称。
如果指定了约束名则删除的时候写约束名。
1
2
3
4
5
6
7
8
9
alter table student7 add constraint uk_student7_name unique(name);

create table student6(
id int(8),
name varchar(20),
age int(2),
sex varchar(1),
constraint uk_student6_id_name unique(id,name)
);

自动增长约束

1
2
3
4
5
6
指:表中某字段的值会自动增加

注意:
1.一张表中只能有一个自动增长的字段。
2.配合主键一起使用,并且只适用于整数类型。
3.自动增长默认的初始值1,每增加一条记录,该字段的值会增加1。
1
2
3
4
5
6
7
8
create table 表名(
字段名 字段类型 auto_increment
);

alter table 表名 modify 字段名 字段类型 auto_increment;

删除自增长约束:
alter table 表名 modify 字段名 字段类型;

域完整性

1
2
3
非空约束(NOT NULL):确保字段不接受空值。

默认值约束(DEFAULT):为字段指定一个默认值,当插入记录时如果没有提供该字段的值,则使用默认值。

非空

1
2
1.只能使用列级添加
2.空字符串 “” 或者 0 都不是null
1
2
3
4
5
6
7
8
create table 表名(
字段名 字段类型 not null
);

alter table 表名 modify 字段名 字段类型 not null;

删除非空约束:
alter table 表名 modify 字段名 字段类型 [null];

默认

1
2
3
4
5
指在没有对某字段插入具体值时候会去设置填充默认的值

注意:
1.只能使用列级约束。
2.对于使用默认值约束,如果插入的数据为 “null”,则不会使用默认值,只有没有插入数据时候,才会使用默认值。
1
2
3
4
5
6
7
8
9
create table 表名(
字段名 字段类型 default value
);


alter table 表名 modify 字段名 字段类型 default value;

删除默认值约束:
alter table 表名 modify 字段名 字段类型;

参照完整性

1
参照完整性涉及到外键约束(FOREIGN KEY),确保一个表中的字段值必须在另一个表的字段值中存在。这通常用于实现表之间的关联关系。
1
2
3
某一张表中某字段的值依赖于两一张表中某字段的值
主要实现了数据库中的参照完整性
将两张表紧密结合,对某张表修改或者删除时候,要保证数据的完整
1
注意: 虽然 MySQL 提供了列级添加外键约束,但添加完后不会生效,所以使用表级添加外键约束
1
2
3
4
5
6
7
8
create table 表名(
字段名 字段类型,
[constraint 外键约束名] foreign key(字段名) references 表(字段名)
);

alter table 表名 add [constraint 外键约束名] foreign key(字段名) references 表(字段名);

alter table 表名 drop foreign key 外键约束名;