Mysql外键约束--转载
链接:http://www.cnblogs.com/xuanan/p/7240923.html#undefined
一、外键约束
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 外键约束备注
梳理mysql外键约束的知识点. 1.mysql外键约束只对InnoDb引擎有效: 2.创建外键约束如下: DROP TABLE IF EXISTS t_demo_product; CREATE TA ...
- MySQL外键约束On Delete、On Update各取值的含义
主键.外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...
- mysql外键约束总结
总结三种MySQL外键约束方式 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是 ...
- MYSQL外键约束的参照操作
如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常 ...
- Mysql外键约束之CASCADE、SET NULL、RESTRICT、NO ACTION
Mysql中有目前只有InnoDB引擎支持外键约束,InnoDB中外键约束定义的语法如下: ALTER TABLE tbl_name ADD [CONSTRAINT [symbol]] FOREIGN ...
- MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: ALTER TABLE tbl_name ADD [CON ...
- Mysql外键约束设置使用方法
如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常 ...
- mysql 外键约束
外键的定义语法:[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col ...
- 1、Mysql无法创建外键的原因 2、MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用
在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1. 两个字段的类型或者大小不严格匹配.例如,如果一个 ...
随机推荐
- JVM 学习(二)Java 内存模型、方法内联、逃逸 --- 2019年4月
1.Java 的内存模型 定义了 happens-before,如果同一个线程中,字节码的先后顺序,后者观测了前者的运行结果,那么就会按顺序执行. Java 线程之间的通信由 Java 内存模型控制. ...
- 文件输入输出流工具: IOUtils使用总结
序言 以前写文件的复制很麻烦,需要各种输入流,然后读取line,输出到输出流...其实apache.commons.io里面提供了输入流输出流的常用工具方法,非常方便.下面就结合源码,看看IOUTil ...
- axios(封装使用、拦截特定请求、判断所有请求加载完毕)
博客地址:https://ainyi.com/71 基于 Promise 的 HTTP 请求客户端,可同时在浏览器和 Node.js 中使用 vue2.0之后,就不再对 vue-resource 更新 ...
- .NET CAD二次开发学习 直线画矩形并转换成组
主要代码: using System;using System.Collections.Generic;using System.Linq;using System.Text;using System ...
- 数据结构——Java实现链栈
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...
- mysql触发器new和old
下面为您介绍mysql触发器new old的相关知识,供您参考学习,如果您在mysql触发器方面遇到过类似的问题,不妨一看,相信对您会有所帮助. mysql触发器new old: "NEW ...
- Ubuntu16.04安装RealSense SR300驱动
原文链接 https://blog.csdn.net/u013401766/article/details/78472285 第一步:CMake 3.14.0 安装 1)下载cmake-3.14.1. ...
- Eclipse安装hibernate插件
进入hibernate官网下载 http://tools.jboss.org/downloads/ 选择合适版本 下载完成后在eclipse->help->intall new softe ...
- nginx系列14:对HTTP协议的反向代理proxy模块
proxy_pass指令 URL参数规则 需要注意的是,url中携带和不携带URI时发往上游请求的行为不同!
- EF时,数据库字段和实体类不一致问题
场景:由于一些原因,实体中属性比数据库中字段多了一个startPage属性.PS:controllers中用实体类去接收参数,但是传入的参数比数据库中实体表多了一个字段, 这种情况下,应该建一个vie ...