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则关闭) 备忘
随机推荐
- Creating Icon Overlay Handlers / 创建图标标记 Handlers (续) / VC++, Windows, DLL, ATL, COM
创建图标标记 Handlers (续) 1.新建一个ATL Project. 2.建议将 Project Property 中 Linker – General - “Register Output” ...
- 通过 append() 和 prepend() 方法添加若干新元素
在上面的例子中,我们只在被选元素的开头/结尾插入文本/HTML. 不过,append() 和 prepend() 方法能够通过参数接收无限数量的新元素.可以通过 jQuery 来生成文本/HTML(就 ...
- form表单提交方式
form表单提交方式总结一下: 一.利用submit按钮实现提交,当点击submit按钮时,触发onclick事件,由JavaScript里函数判断输入内容是否为空,如果为空,返回false, 不提交 ...
- jsp中怎么隐藏from表 和一些按钮?
给你提供两种方法:1.style.display="none"2.添加margen-left属性,值赋为负数,页面上有,但是不会显示
- flex datagrid itemrender wordwrap失效
现在我是想把datagrid中的部分字体变个颜色. 但是重写set data函数后发现原先的wordwrap自动换行不好使了. 于是就在谷歌上找问题.. 参考了两篇: http://stackover ...
- python3----练习题(三级菜单)
三级菜单程序. 运行程序输出第一级菜单. 选择一级菜单某项,输出二级菜单,同理输出三级菜单. 退出时返回上一级菜单 menu = { '北京市': { '东城区': { 'aa', 'bb', }, ...
- lumen-Permission 权限管理使用心得
安装 composer require spatie/laravel-permission github上有详细介绍:https://github.com/spatie/laravel-permiss ...
- 2、easyUI-创建 CRUD可编辑dataGrid(表格)
在介绍这节之前,我们先看一下效果图: 双击可以进入编辑
- java中通过配置文件的方式(Jedis驱动)使用Redis
在java中使用Redis,实际上是将Redis的一些命令封装到Jedis的实体类中,然后进行调用.
- JQUERY实现的小巧简洁的无限级树形菜单
JQUERY实现的小巧简洁的无限级树形菜单,可用于后台或前台侧栏菜单!兼容性也比较好. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tra ...