2015-09-01 152 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