博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql数据库中表的外键约束
阅读量:5327 次
发布时间:2019-06-14

本文共 2442 字,大约阅读时间需要 8 分钟。

一、外键约束

  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时外界查询终止。

      

    

转载于:https://www.cnblogs.com/xuanan/p/7240923.html

你可能感兴趣的文章
C语言学习总结(三) 复杂类型
查看>>
HNOI2018
查看>>
【理财】关于理财的网站
查看>>
Ubunt中文乱码
查看>>
《当幸福来敲门》读后
查看>>
【转】系统无法进入睡眠模式解决办法
查看>>
省市县,循环组装,整合大数组
查看>>
stm32中字节对齐问题(__align(n),__packed用法)
查看>>
like tp
查看>>
posix多线程有感--线程高级编程(线程属性函数总结)(代码)
查看>>
spring-使用MyEcilpse创建demo
查看>>
DCDC(4.5V to 23V -3.3V)
查看>>
kettle导数到user_用于left join_20160928
查看>>
activity 保存数据
查看>>
typescript深copy和浅copy
查看>>
linux下的静态库与动态库详解
查看>>
hbuilder调底层运用,多张图片上传
查看>>
深入理解基于selenium的二次开发
查看>>
较快的maven的settings.xml文件
查看>>
Git之初体验 持续更新
查看>>