【问题标题】:foreign keys with "ON DELETE CASCADE"带有“ON DELETE CASCADE”的外键
【发布时间】:2011-09-12 19:31:07
【问题描述】:

有人知道如何使用“ON DELETE CASCADE”为“InnoDB”类型的表添加外键

【问题讨论】:

  • 你检查过the documentation吗?
  • 我已经为 MyISAM 执行了这个查询“ALTER TABLE tbl_businessalbum ADD CONSTRAINT fk_1 FOREIGN KEY (businessId) REFERENCES tbl_business (id) ON DELETE CASCADE”。查询成功执行 bt MyISAM 引擎不处理外键 DELETE CASCADE 属性dev.mysql.com/doc/refman/5.0/en/ansi-diff-foreign-keys.html
  • ALTER TABLE yourtable ADD FOREIGN KEY xyzkey (field1, field2, ...) REFERENCES foreigntable (foreignfield1, foreignfield2, ...)。这是你可以在一微秒内用谷歌搜索的东西。 MyISAM 表根本不支持外键。任何外键指令都被忽略/丢弃。您必须使用 InnoDB 表作为外键。
  • @anamus php 您询问了 InnoDB,但在您的评论中您说您使用 MyISAM 进行了尝试。它在 MyISAM 中不受支持,但在 InnoDB 中可以正常工作
  • ALTER TABLE tbl_businessalbum ADD CONSTRAINT fk_1 FOREIGN KEY (businessId) REFERENCES tbl_business (id) ON DELETE CASCADE 我正在使用这个 bt 它显示了这个错误 #1005 - Can't create table 'mydb.# sql-9ec_f0' (errno: 150)

标签: php sql foreign-keys


【解决方案1】:

首先,确保两个表都是 InnoDB。即使 create 语句指示 InnoDB,如果未安装此引擎,MySQL 也会使用 MyISAM 代替。所以检查它们是否真的是 InnoDB。

接下来,确保两列的类型完全相同(例如,如果其中一列是 int(11) 而另一列是 int(11) unsigned,则无法创建外键)。确保您引用的列(在您的情况下为业务表中的 id)具有唯一索引(MySQL 将允许使用任何索引列,但最好使用唯一索引)。如果是主键,就已经有唯一索引了。

接下来,根据文档和其他用户的指示运行语句:

ALTER TABLE yourtable ADD FOREIGN KEY xyzkey (field) REFERENCES foreigntable (foreignfield) ON DELETE CASCADE;

如果不能加外键,可以create trigger instead

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-06
    • 2012-02-11
    • 2021-03-29
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    相关资源
    最近更新 更多