使用复合主键在联结表上设置外键约束
Posted
技术标签:
【中文标题】使用复合主键在联结表上设置外键约束【英文标题】:Setting Foreign Key restraints on Junction table with a compound primary key 【发布时间】:2016-01-31 09:46:12 【问题描述】:我有一个联结表,用于存储测试和测试中的问题之间的关系,将testFK
和questionFK
设置为复合主键以防止重复条目。
连接表:
+--------+------------+
| testFK | questionFK |
+--------+------------+
| 7 | 1 |
+--------+------------+
| 7 | 2 |
+--------+------------+
| 7 | 3 |
+--------+------------+
| 8 | 4 |
+--------+------------+
| 8 | 5 |
+--------+------------+
| 8 | 6 |
+--------+------------+
我想做的事:
从test table
中删除testID
后,我希望将Junction Table
中带有testFK=8
的所有行也删除。
问题:
phpmyadmin 不允许我将 testFK
设置为来自 test table
的 testID
的 foreign key
。
处理这种情况的最佳方法是什么?
感谢您的任何意见!
更新: 创建代码:
CREATE TABLE IF NOT EXISTS `junc_test_question` (
`testFK` int(11) NOT NULL,
`questionFK` int(11) NOT NULL,
`ordinal` int(3) NOT NULL DEFAULT '1',
PRIMARY KEY (`testFK`,`questionFK`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
【问题讨论】:
可能是这个答案:***.com/questions/19184538/… @MortenSickel 尝试此操作时出现相同的错误:#1452 - 无法添加或更新子行:外键约束失败(db_assess
.#sql-2510_69
, CONSTRAINT testFK
FOREIGN关键(testFK
)参考test
(testID
))
请发布您的创建表代码
您可以为此创建触发器
【参考方案1】:
DROP TRIGGER remove_test_table
GO
CREATE TRIGGER remove_test_table
FOR DELETE
AS
DELETE FROM test_table WHERE testFK IN (SELECT testFK FROM deleted);
GO
【讨论】:
请解释您的代码如何为问题提供解决方案。这有助于 OP 理解和应用您的代码,也有助于未来的搜索者。 当条目删除remove_test_table它删除所有与test_table相连的条目以上是关于使用复合主键在联结表上设置外键约束的主要内容,如果未能解决你的问题,请参考以下文章
初学者必备:MySQL的主键,外键与唯一约束设置(点赞!!!)