1)无法创建外键ON DELETE SET NULL,或ON DELETE CASCADE 2)无法打开DELETE CASCADE

时间:2014-01-23 14:39:10

标签: mysql foreign-keys cascade

我无法在UPDATE CASCADE上添加外键约束ON DELETE CASCADE。

我使用两个简单的表格。

TAB1有2列:ID int(10)unsigned NOT NULL AUTOINCREMENT,data int(10)unsigned NOT NULL。

TAB2有2列:ID int(10)unsigned NOT NULL AUTOINCREMENT,和FK int(10)unsigned NOT NULL。

我可以使用“ON DELETE RESTRICT”在TAB1中的列ID上的表TAB2中创建外键前端列FK。

但是我无法使用“ON DELETE CASCADE”或“ON DELETE SET NULL”创建这样的键。错误是“#1215 - 无法添加外键约束”。

我尝试过signed,NULL,int(4)... ets。不要在错误的哪个地方留言。


我在一个月前用CASCADE创建的唯一FOREIGN KEY(tcfkowner)在TABLE tcalendar ADD REFERENCES tuser(tcid)中。

我知道在DELETE CASCADE上意味着如果我删除用户,日历中指向用户的行也将被删除。

相反,外键似乎限制了对其父级的删除:我无法删除TABLE tuser中由FOR tcfkowner指向的任何行。tcalendar来自TABLE gintare_calendar。错误消息:

“MySQL说:文档

1451 - 无法删除或更新父行:外键约束失败(tcalendartcalendar_ibfk_1,CONSTRAINT tcfkowner FOREIGN KEY(tuser)REFERENCES {{1 (tcid))“。

2 个答案:

答案 0 :(得分:0)

两个字段 - 在主表和详细表中,必须相同;先检查一下。

尝试使用此脚本创建表并添加外键 -

CREATE TABLE tab1 (
  id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  data int(10) UNSIGNED NOT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB;

CREATE TABLE tab2 (
  id int(10) UNSIGNED NOT NULL,
  fk int(10) UNSIGNED NOT NULL
)
ENGINE = INNODB;

ALTER TABLE tab2
  ADD CONSTRAINT FK_tab2_tab1_id FOREIGN KEY (fk)
    REFERENCES tab1(id) ON DELETE CASCADE ON UPDATE RESTRICT;

或者只是试试这个 -

CREATE TABLE tab1 (
  id int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  data int(10) UNSIGNED NOT NULL,
  PRIMARY KEY (id)
)
ENGINE = INNODB;

CREATE TABLE tab2 (
  id int(10) UNSIGNED NOT NULL,
  fk int(10) UNSIGNED NOT NULL,
  CONSTRAINT FK_tab2_tab1_id FOREIGN KEY (fk)
  REFERENCES tab1 (id) ON DELETE CASCADE ON UPDATE RESTRICT
)
ENGINE = INNODB;

答案 1 :(得分:0)

您无法添加ON DELETE SET NULL,因为TAB1中的设置字段设置为非空。 您可以通过更改级联或设置字段以允许空值来解决此问题。 希望对我的英语有所帮助和抱歉