MySQL单个表上的多个外键约束
我有两个不相关的表,但每个表都有相同的列类型,我称之为“somefield”MySQL单个表上的多个外键约束,mysql,foreign-keys,constraints,Mysql,Foreign Keys,Constraints,我有两个不相关的表,但每个表都有相同的列类型,我称之为“somefield” CREATE TABLE `table1` ( `id` int(10) NOT NULL AUTO_INCREMENT, `somefield` varchar(255) NOT NULL DEFAULT '', PRIMARY KEY (`id`), UNIQUE KEY `somefield` (`somefield`), ) CREATE TABLE `table2` ( `id` int(5) N
CREATE TABLE `table1` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`somefield` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `somefield` (`somefield`),
)
CREATE TABLE `table2` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`somefield` int(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `somefield` (`somefield`)
)
在我插入这些表中的任何一个之后,我将“somefield”值插入到这个表中
CREATE TABLE `table3` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`somefield` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `somefield` (`somefield`),
CONSTRAINT `FK_table3` FOREIGN KEY (`somefield`) REFERENCES `table1` (`somefield`) ON DELETE CASCADE ON UPDATE CASCADE
)
现在,如果我删除表1中的一行,那么表3中的同一行也会被删除。我可以插入到表1并在表3上插入,没有任何问题,但是如果我插入到表2并尝试插入到表3,我会得到这个错误
完整性约束冲突:1452无法添加或更新子行:
外键约束失败
我知道这与外键约束有关,因为它希望“somefield”值出现在表1中。我想知道的是如何添加另一个约束
ALTER TABLE table3 ADD CONSTRAINT FK_table3 FOREIGN KEY (`somefield`) REFERENCES `table2` (`somefield`) ON DELETE CASCADE ON UPDATE CASCADE;
我是否需要创建两个表作为table1/table3和table2/table3的中间人?我可以通过创建一个其他三个表都链接到的表对其进行排序 如果在新表中删除了一行,则结果行将在其他表中删除
CREATE TABLE IF NOT EXISTS `table1` (
`id` tinyint(3) NOT NULL AUTO_INCREMENT,
`somefield` varchar(12) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `somefield` (`somefield`)
);
CREATE TABLE IF NOT EXISTS `table2` (
`id` tinyint(3) NOT NULL AUTO_INCREMENT,
`somefield` varchar(12) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `somefield` (`somefield`)
);
CREATE TABLE IF NOT EXISTS `table3` (
`id` tinyint(3) NOT NULL AUTO_INCREMENT,
`somefield` varchar(12) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `somefield` (`somefield`)
);
CREATE TABLE IF NOT EXISTS `supertable` (
`somefield` varchar(12) NOT NULL DEFAULT '',
PRIMARY KEY (`somefield`),
UNIQUE KEY `somefield` (`somefield`)
);
ALTER TABLE `table1`
ADD CONSTRAINT `FK_table1` FOREIGN KEY (`somefield`) REFERENCES `supertable` (`somefield`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `table2`
ADD CONSTRAINT `FK_table2` FOREIGN KEY (`somefield`) REFERENCES `supertable` (`somefield`) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `table3`
ADD CONSTRAINT `FK_table3` FOREIGN KEY (`somefield`) REFERENCES `supertable` (`somefield`) ON DELETE CASCADE ON UPDATE CASCADE;