1.SQL外键约束
特点:使用在多表中(从表中的外键值必须在朱标的主键值中存在)
关键词:constrains foreign key references
新建表时添加外键约束:
constrains 外键名 foreign key(外键字段) references 主表(主键字段)
为已创建好的表添加外键约束:
alter table 从表名 add constrains 外键名 foreign key(外键字段) references 主表(主键字段);
外键约束作用:
1.操作从表
1.向子表中添加外键值时,添加的外键值必须在主表关联的主键值中存在
2.修改子表中外键值时,修改后的外键值必须在主表关联的主键值中存在
2.操作主表
1.删除主表中的数据时,从表中有关联的外键值,设置为null,或者直接删除外键数据
2.变更主表中主键值时,从表中有关联的外键值,设置为null,或者直接删除外键数据,或者将从表中关联外键值同步为新主键值
删除表时:先删除从表,后删除主表
创建表时:先创建主表,后创建从表
1.删除时:
1.restrict 默认 No action 作用类似,都会检查外键约束
2.set null 删除主表中数据时,将关联从表中的外键值设置为null
3.cascade 删除主表中数据是,将关联从表中的数据删除
2.变更时:
1.restrict 默认 No action 作用类似,都会检查外键约束
2.set null 变更主表中数据时,将关联从表中的外键值设置为null
3.cascade 变更主表中数据时,将关联从表中的外键值变为新值
# 方式一
-- 1.手动删除从表中关联的数据
delete from emp where did = 1;
-- 2.删除主表中的数据
delete from dept where did = 1;
# 方式二
-- 1.手动将从表中关联的外键值设置为null
update emp set did=null where did=2;
-- 2.删除主表中的数据
delete from dept where did = 2;
2.内连接
定义:通过条件(等值的判断条件)匹配两张表中的数据,匹配上就显示,匹配不上就不显示。
格式:
SQL92: select 字段,... from 表1,表2 where 条件;
SQL99: select 字段,... from 表1 [inner] join 表2 on 条件;
实现:
1.不同的表进行内连接
2.同一张表(自连接)进行内连接
3.判断条件为等值判断,等值内连接
SQL92: select 字段,... from 表1,表2 where 字段1=字段2;
SQL99: select 字段,... from 表1 join 表2 on 字段1=字段2;
4.判断条件为非等值判断,非等值内连接
SQL92: select 字段,... from 表1,表2 where 字段1 between 字段2 and 字段3;
SQL99: select 字段,... from 表1 join 表2 on 字段1 between 字段2 and 字段3;
自连接:一张表当两张表使用,自己连接自己
3.外连接
3.1左外连接
定义:以左表为主,左表中的数据都会显示,右表没有匹配的数据以null填充。
格式:
select 字段,... from 表1 left [outer] join 表2 on 条件;
实现:
1.不同的表进行左外连接
2.同一张表(自连接)进行左外连接
3.判断条件为等值判断,等值左外连接
SQL99: select 字段,... from 表1 left join 表2 on 字段1=字段2;
4.判断条件为非等值判断,非等值左外连接
SQL99: select 字段,... from 表1 left join 表2 on 字段1 between 字段2 and 字段3;
3.2右外连接
定义:以右表为主,右表中的数据都会显示,左表没有匹配的数据以null填充
格式:
select 字段,... from 表1 right [outer] join 表2 on 条件;
实现:
1.不同的表进行右外连接
2.同一张表(自连接)进行右外连接
3.判断条件为等值判断,等值右外连接
SQL99: select 字段,... from 表1 right join 表2 on 字段1=字段2;
4.判断条件为非等值判断,非等值右外连接
SQL99: select 字段,... from 表1 right join 表2 on 字段1 between 字段2 and 字段3;
3.3全外连接
MySQL不支持全外连接:左右表中数据全展示,没有匹配就用null填充
定义:将左外连接的结果与右外连接的结果合并,合并时去重
左外连接与右外连接用union连接
select 字段,... from 表1 left [outer] join 表2 on 条件
union
select 字段,... from 表1 right [outer] join 表2 on 条件;