zoukankan      html  css  js  c++  java
  • 外键约束的参照操作(十八)

     

     

    外键约束的参照操作

      1 CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。

      2SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL。

      3 RESTRICT:拒绝对父表的删除或更新操作。

      4NO ACTION:标准SQL的关键字,在MYSQL中 和RESTRICT相同。

     

     

     

     

     

      例如:我们参照provinces表来创建一张user1表,如下图

     create table user1(
     id smallint unsigned primary key auto_increment,
     username varchar(10) not null,
     pid smallint unsigned,
     foregin key (pid) references provinces (id) on delete cascade
     );

       

       在我们父表中,进行删除与更新记录的同时,也删除和更新子表中对应的记录。

       注意:要先在父表中插入数据,再这子表中插入数据。

          原因是:因为子表是参照父表中的信息,若父表中都不存在某个信息了,自然子表更加没啦!

       要明确,在父表provinces里,是id和pname 。其中id是自动,所以我们只需插入pname即可。

    insert provinces(pname) values('A')


    insert provinces(pname) values('B')


    insert provinces(pname) values('C')


    select * from provinces;

    insert  user1(username,pid)  values('zhaosi',3);
    
    
    insert  user1(username,pid)  values('liuneng',5);
    
    
    insert  user1(username,pid)  values('liuneng',1);
    
    
    insert  user1(username,pid)  values('xiaomeng',2);

      3是省份id为3的字段

      咦,为什么id是1,3,4呢?而不是1,2,3?

      答:因为,刚我们故意有条记录没写成功,但它编号的自动增加的。

       现在,我们把父表provinces中id为3的记录,删除掉。看对应user1子表中pid=3的记录是否也会被删除?果然删除了。

    delete from provinces where id=3;
    
    
    select  *  from  provinces;

       

     

    select  *  from  user1;

      即 1 ▶  CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。(测试完成)

      2 ▶ SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL。(自行去测试啊)

      3 ▶ RESTRICT:拒绝对父表的删除或更新操作。(自行去测试啊)

      4 ▶ NO ACTION:标准SQL的关键字,在MYSQL中 和RESTRICT相同。(自行去测试啊)

     

     

     

     

     

     

    总结

      (1)实际,在生产里,我们很少去物理的外界约束,而往往是使用逻辑的外界约束。

          因为,物理的外界约束只有InnoDA这样的引擎才支持,而MyISAM等不支持。

      (2)实际,在生产里,在定义两张表的结构时,我们是按照两张表存在的某种结构的方式去定义,但是不去使用,foregin key关键字。

     

  • 相关阅读:
    Struts2(五)——核心拦截器
    Struts2(四)——页面相关内容
    Struts2(三)——数据在框架中的数据流转问题
    Python Day 1
    c++-STL:删除子串
    九度1165:字符串匹配
    九度1051:数字阶梯求和
    数据结构之二叉树基础三
    数据结构之二叉树基础二
    数据结构之二叉树基础一
  • 原文地址:https://www.cnblogs.com/zlslch/p/6535054.html
Copyright © 2011-2022 走看看