如何确保可以复制几行(A,B)值,但在同一个表中的行C中只能有一个对应的值?
假设我按此顺序插入这些行,这是我想要的输出。
修改 我想要的是,当第一次插入A,B,C时,C中的值将是这对夫妇唯一可能的值(A,B)
这意味着,如果i,当(A,B)中没有其他(0,0)对时,插入(0,0)C = 1,则接受该行。但是如果我添加(0,0) )第二次(第三次)时间;然后C必须等于1.
示例:
A | B | C | D | F ...
_________________
0 | 0 |1
0 | 0 |1
0 | 0 |2 --> not allowed
1 | 0 |3 --> allowed
1 | 0 |2 --> not allowed
1 | 0 |3 --> allowed
答案 0 :(得分:2)
尝试此触发器
DELIMITER $$
CREATE TRIGGER wtf_dupes BEFORE INSERT ON your_table
FOR EACH ROW
BEGIN
SET @ok := TRUE;
SELECT FALSE INTO @ok FROM your_table
WHERE
A = new.A
AND B = new.B
AND C <> new.C
LIMIT 1
;
IF NOT @ok THEN
SIGNAL SQLSTATE '23000' SET MESSAGE_TEXT = 'YourMessageAboutDupeError';
END IF;
END $$
DELIMITER ;
关于如何捕获信号你应该自己调查: http://dev.mysql.com/doc/refman/5.5/en/signal.html#signal-effects
答案 1 :(得分:0)
虽然有办法create a trigger that checks another table or view 对于现有的价值组合,canceling insert from within a trigger in MySQL上存在一个问题,并且接受的答案表明没有此类功能。所以我认为你必须在应用程序逻辑中实现它或将插入移动到过程。