一、MYSQL中的约束

  1、主键:primary key 唯一非空的特性并且可以优化查询速度

  2、外键:foreign key 外键的作用保证2个或2个以上的数据表的数据一致性和完整性

  3、唯一:unique

  4、非空:not null

  5、默认值:deafult

  6、自增:auto_increment 设置了自增值每次自动增加1

二、外键的添加方式

  1、方式一

    create table 表名 (

      字段名1 数据类型  约束,

      字段名2 数据类型 约束,

      。。。

      constraint  外键名  foreign key(字段名)  references   主表名(字段名)  级联操作);

   方式2:表创建完成后添加外键

   alter table 表名 add constraint  外键名  foreign key (字段1) references  表名2(字段名2)级联操作;

三、外键的注意事项

  

1、  两个表xiaodi和dage,如果xiaodi表中设置了外键关联了dage,那么我们把xiaodi表称为从表,dage表称为主表

2、  在建表的时候要现有主表,后有从表

3、  如果要删除数据表,那么需要先删从表,在删主表

4、  如果要向从表中插入数据,那么插入的数据必须是主表中存在的值,如果该值不存在,那么插入操作执行失败

5、  不可以对主表中的和从表有关联的数据直接进行删除,只有把从表的相关的数据先删除后再删除主表中的数据(即先删从表,再删主表)

6、  一个表中可以有多个外键,但是主键只能有一个

7、  外键通常关联的是主表的主键或者设置了unique的字段

8、  如果要使用外键,那么存储引擎不可以是myisam

9、  外键和外键关联的字段的数据类型要一致

一、查看外键:show  create  table  表名;

二、删除外键:alter  table  表名  drop   foreign  key   外键名;

三、外键的级联操作

1、  on   delete   cascade:表示主表中的数据被删除后,从表中相关数据也会被删除

2、  on   update   cascade:表示主表中的数九被修改后,从表中的相关数据也会被修改

3、  on  delete  cascase  on  update  cascase:表示删除和修改都有级联操作

4、  on  delete  set  null:表示主表中的数据被删除后,从表中相关数据会被设置为null

5、  on   update  set null

6、  示例:

---------------------------------------------------------------------------------------------------------------------------------------------------------

一、什么是连接查询:就是将二个或二个以上的表,“连接起来”当做一个数据源,并从中去取得所须要的数据。连接查询包括交叉连接查询、内连接查询、外连接查询

(一)  交叉连接:交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

1、  格式1:select  要查询的内容   from  表名1  cross  join  表名2;

2、  格式2:select  要查询的内容   from  表名1,表名2…;

3、  格式3:select  要查询的内容   from  表名1  join 表名2;

(二)  内连接:内连接也叫连接,是最早的一种连接。还可以被称为普通连接或者自然连接,内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所以内连接可能会丢失信息。

1、  方法1:select  要查询的内容   from  表名1  inner  join  表名2  on  表1.字段名=表2.字段名;

2、  方法2:select  要查询的内容   from  表名1  join  表名2  on  表1.字段名=表2.字段名;

3、  注意:在使用内连接时,可以给表起别名,格式为select  要查询的内容   from  表名1  别名1  join  表名2  别名2  on  别名1.字段名=别名2.字段名;

(三)  外链接:只限制一张表中的数据必须满足连接条件,而另一张表中的数据可以不满足连接条件的连接方式,外连接分为左外连接、右外连接

1、  左外连接(以左表为主,即左表中的内容会全部显示出来,右表中不符合条件的部分用null补充):select  要查询的内容  from  表1  left  join  表2  on 表1.字段名=表2.字段名;

2、  右外连接(以右表为主,即右表中的内容会全部显示出来,左表中不符合条件的部分用null补充)):select  要查询的内容  from  表1  right  join  表2  on 表1.字段名=表2.字段名;

3、  习题:以product表和product_type表为例,查出每个品种各有多少个商品select a.protype_name, count(b.pro_name) from product_type a left join product b on a.protype_id = b.protype_id group by a.protype_name;

二、子查询:当一个查询是另一个查询的条件时,称之为子查询。子查询可以分为如下几类

(一)  按子查询结果分:表子查询、行子查询、列子查询、标量子查询

1、  表子查询:子查询的结果为多行多列,即一个表,该子查询通常放在from关键字后面

2、  行子查询:返回一行数据中多个列的内容

3、  列子查询:返回的结果为一列多行数据,此时可以当做“多个值”使用,类似:(5,17,8)

4、  标量子查询:返回的结果为一行一列,即一个值

(二)  按子查询所在位置分

1、  作为主查询的结果数据:select c1,(select  f1  from  tab2)  as  f11  from  tab1;这里子查询应该是一个标量子查询

2、  作为主查询的条件数据:select  c1  from  tab1  where  c1  in  (select  f1  from  tab2);这里子查询应该是列子查询,即一列多行

3、  作为主查询的数据来源:select  c1  from  (select  f1  as  c1, f2  from  tab2)  as  t2;这里子查询应该是表子查询

(三)  子查询之any、all关键字的使用

1、  any:表示大于集合中的任意一个值即可

1)     表1

2)     表2

3)     查询1:mysql> select * from tab2 where id>any (select f1 from tab3);

4)     查询2:mysql> select * from tab2 where id>all (select f1 from tab3);

(四)  子查询之exists关键字

mysql 外键约束及表关联的更多相关文章

  1. MySQL数据库(4)_MySQL数据库外键约束、表查询

    一.外键约束 创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY ...

  2. MySQL外键约束On Delete、On Update各取值的含义

    主键.外键和索引的区别?   主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...

  3. 1、Mysql无法创建外键的原因 2、MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用

    在Mysql中创建外键时,经常会遇到问题而失败,这是因为Mysql中还有很多细节需要我们去留意,我自己总结并查阅资料后列出了以下几种常见原因. 1.  两个字段的类型或者大小不严格匹配.例如,如果一个 ...

  4. mysql外键约束总结

    总结三种MySQL外键约束方式 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是 ...

  5. mysql 外键约束备注

    梳理mysql外键约束的知识点. 1.mysql外键约束只对InnoDb引擎有效: 2.创建外键约束如下: DROP TABLE IF EXISTS t_demo_product; CREATE TA ...

  6. Mysql外键约束--转载

    链接:http://www.cnblogs.com/xuanan/p/7240923.html#undefined 一.外键约束 1.什么是外键? 外键指的是其他表中的主键,当做该表的外键. 2.创建 ...

  7. MySql 外键约束 之CASCADE、SET NULL、RESTRICT、NO ACTION分析和作用

    MySQL有两种常用的引擎类型:MyISAM和InnoDB.目前只有InnoDB引擎类型支持外键约束.InnoDB中外键约束定义的语法如下: ALTER TABLE tbl_name ADD [CON ...

  8. Mysql外键约束设置使用方法

    如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是修改或者删除的级联操作将使得日常 ...

  9. mysql 外键约束

    外键的定义语法:[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)    REFERENCES tbl_name (index_col ...

随机推荐

  1. 使用Python进行OCR -- 识别图片中的文字

    工具 Tesseract pytesseract tesserocr 朋友需要一个工具,将图片中的文字提取出来.我帮他在网上找了一些OCR的应用,都不好用.所以准备自己研究,写一个Web APP供他使 ...

  2. 手把手教你写vue插件并发布(一)

    vue的插件开发 这篇文章较长,需要一定的阅读时间.这里有一份改善版本的插件笔记,在一个项目下完成开发.测试.发布的全过程.https://www.cnblogs.com/adouwt/p/96555 ...

  3. springMVC下载中文文件名乱码【转】

    //遇到的现象是,下载含有中文文件名的文件时,能获取到文件,但是使用IE正常,使用firefox,chrome文件名却乱码.//既然如此,就区分一下浏览器再返回好了,处理方式如下 //RESTfull ...

  4. HTML常用基础标签

    HTML常用基础标签 带有语义的标签 <em> </em> 强调 <strong> </strong> 比em强调级别高 <abbr> &l ...

  5. java 学习之环境配置

    准备JDK 到Java官网下载jdk即可,网址:http://www.oracle.com/technetwork/java/javase/downloads/index.html. 配置开发环境 鼠 ...

  6. [转] 微信小程序之生命周期

    本篇文章介绍小程序的生命周期,由于小程序分为应用和页面两个部分,所以小程序的生命周期就涉及到三个部分,分别是: 应用的生命周期 页面的生命周期 应用的生命周期对页面生命周期的影响 一.应用的生命周期 ...

  7. CentOS7部署Django,nginx,uwsgi,redis

    前期准备 把所有的软件都传到这个tools文件夹 cd - mkdir tools cd tools/ mkdir /application 安装nginx yum install pcre pcre ...

  8. 设计模式学习之责任链模式(Chain of Responsibility,行为型模式)(22)

    参考:http://www.cnblogs.com/zhili/p/ChainOfResponsibity.html 一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1 ...

  9. IdentityServer4 记录

    IdentityServer4 文档 https://www.cnblogs.com/edisonchou/p/identityserver4_foundation_and_quickstart_01 ...

  10. webpack 打包测试和生产多个版本

    cross-env修改生产环境变量 npm i --save-dev cross-env 在package.json里这么配置 npm run build就是打包到生产环境 npm run build ...