2011-07-31 19 views
6

今私が持っている::複数カラムのユニーク制約

aまたは bUNIQUEキー...

あるしかし、今、私は場合にのみ、別の行更新する場合は動作します

INSERT INTO mytable (a,b,c,d) VALUES(1,2,3,4) 
    ON DUPLICATE KEY UPDATE c=VALUES(c),d=VALUES(d) 

ペア(a、b)はテーブルに存在しません(そうでない場合は挿入をスキップします)。

基本的(a,b)なく、(a)又は(b)一意であるshoudが、両方が接続されています。そこ5,15,25.37.1など

だ。しかし、ここで行#2は、行#1の重複と見なさ、その行#しなければならないので

たとえば、これらの行は

ID (auto-inc) | a | b | c | d 
      0 | 5 | 1 | 343 |466 
      1 | 5 | 2 | 363 |466 
      2 | 5 | 3 | 343 |496 
      3 | 7 | 1 | 343 |496 

有効になります1を更新する必要があります:

ID (auto-inc) | a | b | c | d 
      0 | 5 | 1 | 343 |466 
      1 | 5 | 1 | 363 |466 
      2 | 5 | 3 | 343 |496 
      3 | 7 | 1 | 343 |496 

これは可能ですか?

答えて

13

を使用すると、データがテーブルに存在している間(a、b)は、あなたがそうよUNIQUEを追加しようとした場合UNIQUE KEY(a,b)にはb

ALTER TABLE tblname ADD UNIQUE (a,b) 
+0

lolありがとう、私は私がとてもばかげているとは信じられません:) – Emma

1
CREATE UNIQUE INDEX index_unique_on_a_and_b ON mytable (a,b) 
1

にそれがあることは注目に値しますない作ります重複キーエラーが発生します。テーブルを空にして、ユニークなインデックスを追加すると、それは動作します。