Soru MySQL'de benzersiz kısıtlama nasıl uygulanır?


Tanımlanmış bir MySQL tablom var:

File
--------------------------
ID int(11) PK
name varchar(100)
customerId int(11) FK
isPrimaryImage tinyint(1)
....


Burada, MySQL'in desteklemediğini okudum UNIQUE CONSTRAINT Birlikte WHERE şart. Her biri için Müşteri Kimliği sadece bir tane olurdu primaryImage = 1.

Yani bu kısıtlamayı uygulamak için başka ne yapabilirim?


25
2017-07-13 12:46


Menşei


Görmek: stackoverflow.com/questions/2504007/... - George Johnston
MySQL benzersiz kısıtlamaları desteklese bile, aynı müşteri kimliğine ve isPrimaryImage = 0'a sahip birkaç tuple sahip olacağınız için (burada müşteri başına birkaç ikincil görüntü alacağınız varsayılarak) bir tane kullanamazsınız (ancak bunlar için 0 yerine NULL kullanabilirsiniz). ). - Frank Schmitt
Tablo tasarımı kapalı, böyle bir düzende ne istediğinizi zorlayamazsınız. - Michael J.V.
Michael J.V. ile aynı fikirdeyim - yolunuzu yapmak yerine, isPrimaryImage sütunundan kurtulur ve bunun yerine bir customerPrimaryImage tablosu eklerim (CustomerID, bir ImageID ve CustomerID'de benzersiz bir kısıtlama). - Frank Schmitt


Cevaplar:


MySQL benzersiz kısıtlamaları mükemmel şekilde destekler.

Bununla birlikte, kısmi kısıtlamaları / dizinleri desteklemez, böylece birincil olmayan görüntüleri bir NULL yerine 0.

ALTER TABLE file ADD CONSTRAINT ux_file_customer_primary 
UNIQUE (customerId, isPrimaryImage)

Rasgele sayı ekleyebilirsiniz NULL içine değerler isPrimaryImage ancak müşteri başına sadece sıfır olmayan bir değer.


54
2017-07-13 12:52



+1 Basit, akıllı ve doğrudan - Adrian Carneiro
düzgün. Bunu deneyeceğim - kasdega
@Quassnoi bu tam olarak ihtiyacım olanı yaptı. - kasdega
@quassnoi == casse-noix ?? - Ring Ø
@ Ringo'yu: en.wikipedia.org/wiki/Kvass - Quassnoi