Mysql 1) 无法在删除集NULL上创建外键,或在删除级联上创建外键2)无法在删除级联上创建外键

Mysql 1) 无法在删除集NULL上创建外键,或在删除级联上创建外键2)无法在删除级联上创建外键,mysql,foreign-keys,cascade,Mysql,Foreign Keys,Cascade,我无法在更新级联上的删除级联上添加外键约束 我使用两个简单的表格 TAB1有两列:ID int(10)unsigned NOT NULL AUTOINCREMENT和data int(10)unsigned NOT NULL TAB2有两列:ID int(10)unsigned NOT NULL AUTOINCREMENT和FK int(10)unsigned NOT NULL 我可以使用“on DELETE RESTRICT”在TAB1的列ID上为表TAB2中的FK列创建外键 但我无法创建带有

我无法在更新级联上的删除级联上添加外键约束

我使用两个简单的表格

TAB1有两列:ID int(10)unsigned NOT NULL AUTOINCREMENT和data int(10)unsigned NOT NULL

TAB2有两列: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-无法添加外键约束”

我试过使用有符号、NULL、int(4)。。。ets。不要站在错误的地方


一个月前,我用CASCADE创建的唯一外键(
tcfkowner
)位于表
tcalendar
addreferencentuser(
tcid
)中

我不明白,on DELETE CASCADE意味着如果我删除用户,日历中指向该用户的行也将被删除

相反,外键似乎限制了其父项的删除:我无法从表
tcalendar
中删除由外键(
tcfkowner
)指向的表
tuser
中的任何行。错误消息:

MySQL说:文档


1451-无法删除或更新父行:外键约束失败(
gintare\u calendar
tcalendar
,约束
tcalendar\u ibfk\u 1
外键(
tcfkowner
)引用
tuser
tcid
)”。主表和明细表中的两个字段必须相同;先检查一下

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

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;

不能添加删除集NULL,因为TAB1中的设置字段设置为非NULL。 您可以通过更改级联或将字段设置为允许空值来解决此问题。
希望能对我的英语有所帮助并表示歉意

非常感谢。复制和粘贴已经成功,并且成功创建了表,我只需要将主键添加到第二个表中。但行动是行不通的。例如,我需要一个关于DELETE SET NULL的函数。我使用此操作而不是级联创建表。但当我删除TAB1中的行时,它在TAB2中相应的外键字段中不是变成0,而是在TAB2中也被删除。如果我删除外键。之后,我无法使用on DELETE CASCADE在同一行上创建外键。我只允许在删除限制时创建外键。原因是什么?我无法创建具有删除集操作的表。我使用了上面的示例,创建了另外两个表tab3、tab4,将主键添加到第二个表中,并将行为更改为“ON DELETE SET NU”。ALTER TABLE语句给出错误“#1005-无法创建表'gintare_temp1.#sql-1fee_bc5197'(错误号:150)”如果我尝试删除级联-它可以工作。为什么我不能设置NULL?可能您没有NULL列,请检查。另外,在无效的ALTER TABLE语句之后,运行SHOW ENGINE INNODB STATUS命令,并查看错误详细信息。