zoukankan      html  css  js  c++  java
  • 5.2.3参照完整性—内容提要

    参照完整性的本质

    • 通过添加一张父表的形式,给当前操作的表(子表)添加一个约束(字典)。

    即:要求子表的某字段(外键),必须在父表的对应字段范围内取值(即写的字,一定要是字典里有的)。

    • 约定了父表进行删除(on delete)或修改(on update)的时候,子表如何保持约束有效(严格/级联/不动作/设空/设默认值)。

    即:改变字典的内容时,文章里对应的字将如何变化。

    通常设置 [严格(默认)/级联/设空/设默认值],对应关键字(无/cascade/set null/set default),含义为(禁止修改字典/文章里的字跟着改/文章里的字设为空/文章里的字设为默认值)

    设置参照完整性后,对两表的一切操作,都应满足上面第一点的描述,且按照第二点的规则工作。


     定义参照完整性

    思想:

    1. 子表中选出一列做外键(默认会被添加普通索引),跟父表的索引(主键或唯一)关联。
    2. 可以起个名字,最好起个名字。(默认的名字不直观)
    3. 可以设置父表的删改规则,不指定默认“严格”。

    语法:

    •  完整写法举例
      CONSTRAINT xh1 FOREIGN KEY (xh) REFERENCES t1(xh) ON DELETE cascade ON UPDATE cascade

      含义:把当前表的xh字段和t1表的xh字段关联,起个名字叫xh1,删除规则是级联,更新规则是级联。

    • 最简写法举例
      FOREIGN KEY (xh) REFERENCES t1(xh)

      含义:把当前表的xh字段和t1表的xh字段关联,名字是mysql乱起的,删除规则是严格,更新规则是严格。

    使用:

    可以把上面参照完整性的内容,当作字段,在创建表(create table)或修改表(alter table)的命令里使用。

    CREATE TABLE t2 (xh char(1) DEFAULT NULL,km varchar(2) DEFAULT NULL,cj int DEFAULT NULL, KEY xh (xh),CONSTRAINT xh FOREIGN KEY (xh) REFERENCES t1 (xh))

    alter table t2 add CONSTRAINT xh FOREIGN KEY (xh) REFERENCES t1(xh) ON DELETE cascade ON UPDATE cascade;

     删除的时候必须用到名字

    alter table t2 drop CONSTRAINT xh;

    小技巧:对于系统的自动命名,可以通过显示建表命令来查看名称。

    show create table t1;

    示例:

     t1为基本情况表,t2为成绩表

     内容:

     借助t1的xh字段,为t2的xh字段添加参照完整性规则:

    alter table t2 add FOREIGN KEY (xh) REFERENCES t1(xh);

    这是“默认命名”的“严格”规则。运行结果:

    t2的xh字段在此时也被自动添加了普通索引:

      

    分别尝试修改t2的最后一条记录和t1的最后一条记录,把学号改为'4',可以看到修改被拒绝:

     在提示中,也可以看到系统给出的默认约束名称:t2_ibfk_1。

    把修改和删除规则改为级联。思想:删除,添加新的规则:

     修改父表时,可以看到子表内容也被修改:

  • 相关阅读:
    android136 360 拖拽
    android134 360 07 归属地查询
    android133 360 06 一键锁频,清楚数据
    转载:必须收藏!50个最流行的免费Kubernetes工具集
    SQL Data Compare 对比 SQLserver数据
    PLSQL 使用ODBC 数据源导入来自SQLSERVER的数据
    PLSQL 使用技巧汇总贴(一个坑)
    简单的数据库备份语句--Oracle+SQLSERVER
    SQLSERVER 导出表数据为insert 语句
    Oracle 使用PLSQL 导出 一个表的insert 语句
  • 原文地址:https://www.cnblogs.com/wanjinliu/p/15534586.html
Copyright © 2011-2022 走看看