假设我出售书籍和CD,所以我在数据库中都有表格,因为我不能同时使用相同的表格。另外,我有两个库存表,通过外键引用相应的项目表。像这样:
book book_stock
----- ----------
bookID book_stockID
title bookID
price
cd cd_stock
----- ----------
cdID cd_stockID
title cdID
price
但我希望有一个通用的股票表格,根据type
列引用两个项目的表格。
book stock
----- ----------
bookID stockID
title type
itemID
price
cd
-----
cdID
title
那么,如何制作检查多个表的约束呢?
答案 0 :(得分:1)
遗憾的是,您无法创建此类约束,因为foreighn键始终基于一个父表。
您可以做的是创建触发器,根据其类型测试输入数据,并回滚不合适的更改:
这样的事情:
CREATE TRIGGER insert_stock_child
BEFORE INSERT
ON stock
FOR EACH ROW
BEGIN
IF new.type = 'BOOK_TYPE' AND (SELECT COUNT(*) FROM book
WHERE book.bookID = new.itemID)= 0
THEN
INSERT error_msg VALUES ('No such book!');
END IF;
END;
-- same logic for the cd table