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则关闭) 备忘
随机推荐
- MySQL(8)--Cluster 7.4 rpm centos7
还没来得及写.我就知道一个月完毕不了,暂时添加的工作总是拖后腿. .. MySQL集群 docker下安装MySQL Cluster报错了.是我image的包少了perl.老实装吧.image又小不了 ...
- iOS的isnan函数
假设一个数是一个确定的数.那它就不是nan值 假设一个数是无穷大,无穷小.那它就是nan值 我试着打印了下面的值是不是nan值 if (isnan(1)) { DLog(@"1是NAN&qu ...
- 217. Contains Duplicate【easy】
217. Contains Duplicate[easy] Given an array of integers, find if the array contains any duplicates. ...
- imx6 uboot启动流程分析
参考http://blog.csdn.net/skyflying2012/article/details/25804209 这里以imx6平台为例,分析uboot启动流程对于任何程序,入口函数是在链接 ...
- PCB焊接工艺
1. 有铅焊接工艺 240~260℃. 2. BGA焊盘直径为球径80%.
- IDEA中maven打包跳过Junit Test
运行MVN install时需要跳过Junit的test cases,可以采用下面的方法: mvn install -DskipTests 或者mvn install -Dmaven.test.ski ...
- easyui常见属性
4)onBeforeClose:当面板关闭前激活. 5)onClose:当面板关闭后激活. 6)onBeforeDestroy:当面板销 ...
- WebMethod Session
[WebMethod(EnableSession = true)] public static string SayHello() { LxUserContext depno = HttpContex ...
- Spring MVC生成PDF文件
以下示例演示如何使用Spring Web MVC框架生成PDF格式的文件.首先使用Eclipse IDE,并按照以下步骤使用Spring Web Framework开发基于动态表单的Web应用程序: ...
- Oracle数据迁移expdp/impdp
Oracle数据迁移expdp/impdp目的:指导项目侧自行进行简单的数据泵迁移工作. 本文实验环境:Oracle 11.2.0.4,利用数据库自带的scott示例用户进行试验测试. 1.首先需要创 ...