【发布时间】:2011-12-10 03:10:05
【问题描述】:
我正在创建两个这样的表:
CREATE TABLE abc (
id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(64) NOT NULL,
created DATETIME DEFAULT '0000-00-00 00:00:00',
updated DATETIME DEFAULT '0000-00-00 00:00:00'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE def (
abc_id INTEGER NOT NULL DEFAULT 0,
name VARCHAR(64) NOT NULL,
value LONGTEXT,
PRIMARY KEY(name, abc_id),
CONSTRAINT fk_def FOREIGN KEY(id)
REFERENCES abc(id) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
当ABC中的一行被删除时,它应该告诉mysql自动从DEF中删除相应的行。
但这不适用于 DROP 操作。 如果我尝试删除表 abc,我会收到一条错误消息,指出外键约束失败。 看来我需要先放下DEF,然后才能放下ABC。我不明白为什么,因为放弃 ABC 也应该自动放弃 DEF,对吧?或者至少通过从 ABC 中删除与 id 匹配的行来清空它...
【问题讨论】:
标签: mysql database constraints