一、集合
为了合并多个select语句的结果,可以使用集合操作符,实现集合的并,交,差
结合操作符:union union all
用来获取两个或两个以上结果集的并集,
union操作符会自动去掉合并后的重复记录
union all 返回两个结果集中的所有行,包括重复的行。
多条SQL集合操作的SELECT语句的列个数和数据类型必须匹配
例:
select * from 表名
union select * from 表名;
二、约束
约束(constraint
)的全称是约束条件,也称做完整性约束条件
约束是在数据表上强制执行的一些数据校验规则,可以保证表中数据的完整性,保证数据间的商业逻辑
一张表中可以有多个唯一约束
约束的类型
- 非空约束 (not null),简称(
NN
) - 唯一性约束(Unique) ,简称(
UK
) - 主键约束(Primary Key), 简称
PK
- 外键约束(Foreign Key), 简称
FK
非空约束 not null
非空约束用于确保字段值不为空,当某个字段被设置了非空约束条件,这个字段中必须存在有效值
当执行insert操作时,必须提供这个列的数据,当执行update操作时,不能给这个列的值设置为NULL
唯一性约束 unique
唯一性(unique)约束条件用于保证字段或者字段的组合不出现重复值
当给表的某个列定义了唯一约束条件,该列的值不允许重复,但允许是NULL值
唯一性约束条件可以在建表同时建立,也可以在建表以后建立
单个唯一性约束
create table employees (
eid int unique
);
组合唯一性约束
确保多个字段组合后唯一,需要组合添加约束
- 创建表时添加
create table employees ( eid int unique, name varchar(2), constraint employess_name_uk unique(name) )
- 建表后添加
alter table 表名 add constraint 约束名称 unique(字段1,字段2);
- 删除唯一约束
alter table t_user drop index 约束;
主键约束 primary key
主键的意义
主键(primary key)约束条件从功能上看相当于非空约束(not null) 和 唯一约束(unique)的组合
用来唯一确定一行数据,一个表上只允许建立一个主键,而其它约束条件则没有明确的个数限制
主键选取的原则
主键应是对系统无意义的数据,永远也不要更新主键,让主键除了唯一标识一行之外,再无其他的用途,主键应自动生成,不要人为干预,以避免使它带有除了唯一标识一行以外的意义
代码
-
创建时增加
create table 表名( id int primary key auto_increment, name varchar(20) )
-
创建后增加
alter table 表名 add constraint 约束名称 primary key (字段1,字段2);
-
删除
alter table 表名 drop primary key;
auto_increment 表示主键自动增长
- 创建时增加
create table 表名( id int primary key auto_increment, name varchar(20) ) auto_increment = 10; -- 表后面AUTO_INCREMENT表示从多少开始自增
- 创建后增加
alter table stu1 auto_increment = 2;//修改自增长
外键约束 Foreign Key 避免使用
外键约束条件定义在两个表的字段上,用于保证相关两个字段的关系,
外键约束下,删除上层数据需先删除下层数据
- 外键约束对性能的降低
如果在一个频繁DML操作的表上建立外键,每次DML操作都将导致数据库自动对外键所关联的主表做检查,产生开销。
如果已在程序中控制逻辑,这些判断将增加额外的负担,可以省去。外键确定了主从表的先后产生关系,有时会影响业务逻辑。
- 关联不一定需要外键约束
保证数据完整性可由程序控制
简化开发,维护数据时不用考虑外键约束
大量数据DML操作时不需要考虑外键耗费时间
代码
-
创建
create table 学生表( id int, cls_id int, foreign key(cls_id) references cls(id) -- 将cls_id 列关联到 班级表的id列 )
-
外部添加外键约束
alter table 学生表 add constraint 约束名称 foreign key(学生表字段) REFERENCES 班级表(班级表ID)
-
删除外键约束
alter table 表名 drop foreign key 约束名;