2015-09-01 100 views
-1

如何确保一行(A,B)值可以重复,但在同一个表中的C行中只能有一个相应的值?mysql约束或触发器

假设我按照这个顺序插入这些行,这是我想要的输出。

编辑: 我想要的是,当A,B,C被插入在C的第一时间值将是耦合唯一可能的值(A,B)

这意味着,如果我在(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

更多示例请。那么(允许/不是)0 | 0 | 1? – M0rtiis

+0

你对什么是允许和不允许的规则不清楚。 –

+0

我更新了问题。请检查它! – Anima

回答

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