在MySQL中,有没有办法指定a.column
中不存在b.column
- 反向外键?
换句话说:
# Would not return any rows ever
SELECT * FROM a
INNER JOIN b ON a.column = b.column;
# Would fail
INSERT INTO a
SELECT * FROM b;
# Would not insert any rows
INSERT IGNORE INTO a
SELECT * FROM b;
答案 0 :(得分:3)
不,没有这样的事情。
您需要在触发器中执行此操作:
DELIMITER $$
CREATE TRIGGER bi_a_each BEFORE INSERT ON a FOR EACH ROW
BEGIN
DECLARE forbidden_key INTEGER;
SELECT id INTO forbidden_key FROM b WHERE b.id = NEW.acolumn LIMIT 1;
IF forbidden_key IS NOT NULL THEN
SELECT * FROM error_insertion_of_this_value_is_not_allowed;
END IF;
END $$
DELIMITER ;
答案 1 :(得分:2)
在某种程度上,如果你想“可以在A或B中,但不能同时在两者中”
这是“超级键/子类型”模式
创建一个包含2列的新表AB
两列都有唯一约束
然后
现在,SomeUniqueValue只能在A或B中。
注意:在正确的RDBMS中,您可以使用检查约束或计算列来根据需要将WhichChild限制为“a”或“b”。但是MySQL是有限的,所以你需要在MySQL中使用触发器。但是,这比A等中的每个插入测试表B更简单
答案 2 :(得分:0)
尝试创建一个触发器并从中抛出错误。