mysql数据库中表的外键约束
一、外键约束
1、什么是外键?
外键指的是其他表中的主键,当做该表的外键。
2、创建外键。
2.1 可在创建表的时候直接创建外键,如图所示:
create table table_name (字段名 字段属性,[add constraint 外键name] foreign key (字段名) references 主表(主表主键名));
2.2 创建完表后再添加外键
alter table table_name add constraint 外键name foreign key (字段名) references 主表(主表主键名);
2.3删除外键
alter table table_name drop 外键name
2.4注意事项:
所创建的外键属性要和主表中的主键属性相同。
当创建了外键之后,子表中想要删除某条记录可直接删除,但是主表中想要删除某条记录要先把主表和子表对应的外键给删除后才 能删除主表的某条记录,但是这样做子表就没有外键了,所以建议只是修改子表外键所对应主表主键其他的值,这样就可以删除了。
3、外键约束的含义:
3.1外键约束对子表的含义:当在子表中insert或update一条数据时,如果在主表中找不到候选键,那么就不允许该操作。
3.2外键约束对主表的含义:当在主表中insert或update数据时,如果主表的候选键对应的有子表的外键值,那么就不允许该操作。
4、innodb支持on语句的高级用法,略过。
二、多表查询
1、什么是多表查询?
前提是两张表之前没有什么联系,但是至少有一个共同点是至少有一个相同属性的字段。
2、多表查询之连接查询
select * from table_name1,table_name2........ where table_name1.相同属性的字段=table_name2.相同属性的字段 [and able_name1.相同属性的字段=table_name2.相同属性的字段 ];
3、多表查询之内连接查询
select * from table_name1 inner join table_name2 [table_name2.....] on table_name1.相同属性的字段=table_name2.相同属性的字段
[and table_name1.相同属性的字段=table_name2.相同属性的字段];
4、多表查询之外连接查询
4.1左边连接: 在内连接的基础上增加左边有右边没有
select * from table_name1 left join table_name2 [table_name2.....] on table_name1.相同属性的字段=table_name2.相同属性的字 段[and table_name1.相同属性的字段=table_name2.相同属性的字段];
4.2右边连接:在内连接的基础上增加右边有左边没有
select * from table_name1 right join table_name2 [table_name2.....] on table_name1.相同属性的字段=table_name2.相同属性的 字段[and table_name1.相同属性的字段=table_name2.相同属性的字段];
4.3全外连接:在内连接的基础上增加右边有左边没有和左边有右边没有的全部结果
select * from table_name1 left join table_name2 [table_name2.....] on table_name1.相同属性的字段=table_name2.相同属性的字 段[and table_name1.相同属性的字段=table_name2.相同属性的字段] union select * from table_name1 right join table_name2 [table_name2.....] on table_name1.相同属性的字段=table_name2.相同属性的字段 [and table_name1.相同属性的字段=tabel_na
me2.相同属性的字段.....];
4.4 注意:union会去掉相同的记录,但是union all不会。
5、多表查询之复合条件连接查询
5.1 和内外连接的查询方式相同,只不过是在此基础上添加上了别的查询条件。(可以吧内外连接查询出的表看成是一个表)
5.2格式:
select *|表.字段名 [as] [别名].... from 表1,表2.... where 限制条件 group by 条件 havin 条件 order by 条件 limit 条件;
6、多表查询之子查询
6.1什么是子查询?
子查询是将一条查询语句嵌套在另一条查询语句当中,也可以是将一条语句的查询结果当做另一条语句的查询条件,其中子查询中 可以包含 in, not in,any,all,exists,not exists,比较运算符等操作。
6.2exists关键字表示存在,带有exists关键字的子查询返回的结果要么是真要么是假,当子查询返回为true时外界查询继续,当子查询 返回为Flase时外界查询终止。
mysql数据库中表的外键约束的更多相关文章
- mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint f ...
- 总结mysql的三种外键约束方式
如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常 ...
- mysql 启动和关闭外键约束
在MySQL中删除一张表或一条数据的时候,出现 [Err] 1451 -Cannot delete or update a parent row: a foreign key constraint f ...
- MySQL 如何删除有外键约束的表数据
今天删除数据库中数据,提示因为设置了foreign key,无法修改删除 可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS=0; 删除 ...
- EntityFramework Code First 构建外键关系,数据库不生成外键约束
创建 ExtendedSqlGenerator类 public class ExtendedSqlGenerator : SqlServerMigrationSqlGenerator { #regio ...
- 一键删除数据库所有的外键约束-FOREIGN_KEYS
DECLARE @ESQL VARCHAR(1000);DECLARE FCursor CURSOR --定义游标FOR (SELECT 'ALTER TABLE '+O.name+' DROP ...
- MySQL删除所有表的外键约束、禁用外键约束
转: MySQL删除所有表的外键约束.禁用外键约束 2017年10月27日 00:11:34 李阿飞 阅读数:4512 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- (转载)MySQL删除所有表的外键约束、禁用外键约束
其实如果想删除所有表可以直接如下操作: 在navicat中直接选中所有表,然后右键删除表即可,会有提示,一路确定,就会先删掉没有外键的表和字表,只要一路确定,删几批就把表都删完了,并不算太麻烦. 转: ...
- 如果你发现mysql的外键约束不管用了
不知为何我机子上的mysql竟然默认关闭外键约束,导致我试了好多遍都可以插入非法值,以下语句可以开启约束 SET foreign_key_checks = 1; (0则关闭) 备忘
随机推荐
- UVA 11014 - Make a Crystal(容斥原理)
UVA 11014 - Make a Crystal 题目链接 题意:给定一个NxNxN的正方体,求出最多能选几个整数点.使得随意两点PQ不会使PQO共线. 思路:利用容斥原理,设f(k)为点(x, ...
- Nginx https加密以及nginx日志配置与管理
Nginx https加密以及nginx日志配置与管理 使用Nginx的优点Nginx作为WEB服务器,Nginx处理静态文件.索引文件.自动索引的效率非常高.Nginx作为代理服务器,Nginx可以 ...
- .align
.align的作用是针对指令或数据的存放地址对齐.但不同的CPU架构,指令和数据的存储方式不同,也就导致对齐的计量单位不一样. i386:n对齐 ARM:2^n 对齐,ARM架构下,指令都是占32位, ...
- centos7下安装mysql5.7和jdk 1.8
安装mysql5.7 具体安装过程可参见官网:A Quick Guide to Using the MySQL Yum Repository 进入/usr/local/src文件夹. cd /usr/ ...
- PIL之基础应用
>>> from PIL import Image >>> #读取图像文件 ... >>> gal=Image.open('/Users/simi ...
- 开发GPIO驱动的基本套路
最近完成了基于AR9331的GPIO驱动的开发,主要包括:控制一个连接GPIO的灯控:接收一个连接GPIO的按键事件:以及接收一个连接GPIO的脉冲事件. 这里,结合开发实践,总结一下GPIO驱动开发 ...
- openwrt安装编译
官网安装编译推荐: https://wiki.openwrt.org/doc/howto/buildroot.exigence https://wiki.openwrt.org/doc/howto/b ...
- IOS设计模式的六大设计原则之依赖倒置原则(DIP,Dependence Inversion Principle)
定义 高层模块不应该依赖于低层模块,二者都应该依赖于抽象:抽象不应该依赖细节:细节应该依赖抽象. 定义解读 依赖倒置原则在程序编码中经常运用,其核心思想就是面向接口编程,高层模块不应该依赖低层模块(原 ...
- CImg的使用,入门
CImg的使用: const char *imageIN="image.jpg" const char *imageOUT="imgeout.jpg" CImg ...
- MySQL的order by子句
1.语法:select 字段列表 from 表名 [where 子句][group by 子句][having 子句][order by 子句]; 注解: 1.默认是从第一条记录开始升序, 2.des ...