我有类似这样的表
CREATE TABLE A (
Z INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (Z)
) ENGINE=InnoDB;
CREATE TABLE B (
Y INT NOT NULL,
Z INT NOT NULL,
PRIMARY KEY (Y , Z),
FOREIGN KEY (Z)
REFERENCES A (Z)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;
CREATE TABLE C (
Y INT NOT NULL,
Z INT NOT NULL,
PRIMARY KEY (Y , Z),
FOREIGN KEY (Y)
REFERENCES B (Y)
ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (Z)
REFERENCES B (Z)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;
INSERT INTO A VALUES (1);
INSERT INTO A VALUES (2);
INSERT INTO A VALUES (3);
INSERT INTO B VALUES (4, 2);
INSERT INTO B VALUES (3, 1);
INSERT INTO B VALUES (3, 3);
INSERT INTO B VALUES (4, 3);
INSERT INTO C VALUES (3, 1);
INSERT INTO C VALUES (4, 2);如果我这样做了
DELETE FROM A WHERE Z=3B可以正确更新,而C不能。
如果我这样做了
DELETE FROM B WHERE Z=3B可以正确更新,而C不能。
级联上的C正在丢弃与任何东西完全无关的行。事实上,这两个delete命令都不应该到达C语言。
为什么它要用核弹攻击C表?任何一个删除操作都应该删除表B中的(3,3)和(4,3)并停止。
发布于 2013-05-03 01:45:15
问题是,I删除了一些东西,就好像它们是不同的,而不是组合键的一部分。所以我必须在表C中有一些类似于
CREATE TABLE C (
Y INT NOT NULL,
Z INT NOT NULL,
PRIMARY KEY (Y , Z),
FOREIGN KEY (Y , Z)
REFERENCES B (Y , Z)
ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE=InnoDB;然后考虑到它是一个组合键,它可以正确地工作。
https://stackoverflow.com/questions/16312019
复制相似问题