2011-07-31 20 views
6

Şu anda var:: çok sütunlu benzersiz kısıtlama

a veya b UNIQUE anahtarları çalışır
INSERT INTO mytable (a,b,c,d) VALUES(1,2,3,4) 
    ON DUPLICATE KEY UPDATE c=VALUES(c),d=VALUES(d) 

...

Ama şimdi GÜNCELLENECEK istiyorum sadece başka bir satır çiftle (a, b) tabloda yok (aksi halde eklemeleri atlayın).

Temelde (a,b)

benzersiz değil, (a) veya (b) shoud, ancak her ikisi de bağlı.

Örneğin bu satırların geçerli olacak

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 

5,1, 5,2, 5.3, 7.1 vb

Ama # burada 2 satır 1. yinelenen düşünülmelidir satır, böylece satır # Çünkü orada 1 güncelleştirilmelidir:

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 

Bu mümkün mü?

cevap

13

b

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

Teşekkürler, çok aptal olduğuma inanamıyorum :) – Emma

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

Size eklemeye çalışırsanız UNIQUE ADD dikkati çekiyor etmek (a,b) değil UNIQUE KEY yapmak veri tablosunda varken (a, b), büyük olasılıkla olacak yinelenen bir anahtar hatası alın. Tabloyu boşaltın, benzersiz dizini ekleyin ve işe yarayacak.

İlgili konular