MySQL 语句外键 连接

外键

定义: 外键是指引用另一个表中的一列或多列,被引用的列具有主键约束或唯一约束。

目的: 外键用于建立和加强两个表数据之间的连接。

概念:1、 主表——被引用的表;2、从表 ——引用外键的表 。

两者关系: 主从关系。

注意:
(1)建立外键的表必须为 InnoDB 型,不能是临时表。在MySql中只有 InooDB 类型的表才支持外键。
(2)定义外键名时,不能加引号。 如 constraint’FK_ID’或constraint “FK_ID”。

建立外键的基本语法:

alter table 从表名 add constraint FK_ID foreign key(外键字段名) references 主表名(主键字段名);

注意: 当主表中删除数据时,从表中数据也应该删除,否则会产生垃圾数据。MySql 中可以在建立外键时添加 on delete 或 on update 子句告诉数据库,来避免垃圾数据的产生。

alter table 从表名 add constraint FK_ID foreign key(外键字段名) references 主表名(主键字段名)
[on delete{cascade | set null | no action | restrict}]
[on update{cascade | set null | no action | restrict}];

参数说明:

参数名称 功能描述
cascade 删除包含与已删除键值有参照关系的所有记录
set null 删除包含与已删除键值有参照关系的所有记录,使用NULL替换(不能用于已标明 NOT NULL的字段)
no action 不进行任何操作
restrict 拒绝主表删除或修改外键关联列(在不定义 on delete 和 on update 的默认值,也是最安全的值)

当需要解除两表的关联关系时,需要删除,基本语法:

alter table 表名 drop foreign key 外键名 ;

mysql 中数据表之间的关联关有三种:一对一,多对一、多对多。在实际开发中,一对一关联关系可以应用到以下几个方面:
(1)分割具有很多列的表;
(2)由于安全原因,隔离表的一部分;
(3)保存临时数据,且可以毫不费力的通过删除该表而删除这些数据。

在除数据时,删除顺序:先从表后主表 ,否则会报错。

查询

交叉连接(一般不用)

返回笛卡尔积: 即返回第一个表中符合查询条件的数据行 “乘” 第二个表中符合查询条件的数据行数。如 department 表中有4个部门,employee 表中有4个员工,则有4*4=16条数据。

基本语法:

select * from  表1 cross join 表2 ;

说明:cross join连接两个要查询的表。该语句可查询两个表中所有数据组合。

内连接

只有满足条件的记录才能出现在查询记录中,基本语法:

select * from A,B where 条件;             # 隐式内连接
selcet * from A inner join B on 条件;   # 显示内连接:

where 和 inner join 区别:
(1)where:条件判断句,where后可直接添加其他条件。
(2)inner join 内连接语句,后不可以直接添加条件。

外连接

(1)左连接 : 左表
返回包括左表中所有记录和右表中符合连接条件的记录。
(2)右连接 : 右表
返回包括右表中所有记录和左表中符合连接条件的记录。

基本语法:

select 所有字段 from 表1 left | right [outer] join 表2
on 表1.关系字段=表2.关系字段  
where 条件;

参考文章

https://blog.csdn.net/qq_36734216/article/details/78644780
https://blog.csdn.net/xiaoyuxianshenging/article/details/76280614

猜你喜欢

转载自blog.csdn.net/bingfeilongxin/article/details/87972064