MySQL单个表上的多个外键约束

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

我有两个不相关的表,但每个表都有相同的列类型,我称之为“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) 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;