【问题标题】:How do I maintain Referential integrity for a foreign key in the same table in MySQL?如何维护 MySQL 同一张表中外键的参照完整性?
【发布时间】:2014-06-01 23:52:04
【问题描述】:

如何在 MySQL 的同一张表的列中添加参照完整性?

我有一个结构如下的表:

Employee
-----------------------------
----[Other Columns Snipped]----
super_serv_no       
serv_no            (FK for super_serv_no)

如何使serv_no 成为super_serv_no 的外键,并强制引用完整性?

【问题讨论】:

标签: mysql foreign-key-relationship


【解决方案1】:

这是一个创建外键约束的语法示例,如您所描述的(对于使用 InnoDB 引擎的表):

ALTER TABLE `employee` ADD CONSTRAINT 
  `FK_employee_head_serv_no` 
  FOREIGN KEY (`head_serv_no`) REFERENCES `employee` (`serv_no`) 
  ON DELETE RESTRICT ON UPDATE CASCADE

规范模式是外键引用表的主键。 (我认为 MySQL 更宽松,外键可以引用任何被索引的列集,所以至少,你需要有一个以serv_no 为前导列的索引。)我们通常有仅在 serv_no 列上的唯一索引。)

【讨论】:

    【解决方案2】:

    您可以像为不同的表定义 FK 一样定义 FK:

    ALTER TABLE Employee
        ADD CONSTRAINT FOREIGN KEY (super_serv_no)
        REFERENCES (serv_no);
    

    注意: 确保 super_serv_no 未定义为 NOT NULL。这是因为最顶层的 serv_no 不会有 super_serv_no。

    参考资料: Using FOREIGN KEY Constraints at MySQL 5.0 Reference Manual

    【讨论】:

      猜你喜欢
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      相关资源
      最近更新 更多