2016-06-08 17 views
0

Ich habe eine Tabelle mit diesen beiden Spalten, ich will, so unten Zeilen gültig ist, wenn [email protected] mit 1 es erlaubt tritt, wo, wenn [email protected] mit 0 geht es nicht zulassen sollte . Wie mache ich diese Einschränkung in MySQL?Wie mache ich zwei Spalten einzigartig in MySQL mit dem Wert 0/1 in einer Tabelle? nur Einzigartigkeit machen, wenn columng <code>is_deleted</code> Wert 0 für E-Mail-Spalte

email   is_deleted 
[email protected] 1 
[email protected] 1 
[email protected] 1 
[email protected] 0 

Ich habe versucht, einzigartig beide Spalte zu machen, ist es für einen Eintrag erlaubt aber es funktioniert nicht danach.

[email protected] 1 
[email protected] 0 

Ich arbeite an einem weichen Löschen mit eindeutigen Feldern.

Danke für Ihre Hilfe.

Antwort

2

Dies ist tatsächlich eine der besseren Fragen, die ich in Stack Overflow in einer Weile gesehen habe. Aus meiner Sicht ist das per se nicht möglich, zumindest ohne etwas kreatives zu tun.

Der einzige Weg, ich denke, es kann arbeiten machen, ist ein zusätzliches Feld zu schaffen, die eine beliebige Zufalls IFF is_deleted == enthalten 1, und einen eindeutigen Schlüssel gegen alle 3.

Als solche der Tabelle zu verwenden, könnte wie folgt aussehen:

email   is_deleted null_ident 
[email protected] 1   0cc175b9c0f1b6a831c399e269772661 
[email protected] 1   92eb5ffee6ae2fec3ad71c777531578f 
[email protected] 1   4a8a08f09d37b73795649038408b5f33 
[email protected] 0   0 

so würde ein eindeutiger Schlüssel gegen alle drei von diesen nur sperren, wenn is_deleted 0 und null_ident ist auch 0 (wie über Business-Logik behandelt). Wenn Sie is_deleted für die Adresse festlegen müssen, müssen Sie auch einen Ident-Schlüssel festlegen.

Auch eine Ergänzung ... im obigen Beispiel ist null_ident nur ein MD5-Hash für allgemein akzeptable Eindeutigkeit. Je nachdem, was Sie brauchen, möchten Sie vielleicht einen stärkeren (oder wahrscheinlicher, weniger starken) Hash. Verdammt, ein Zeitstempel würde wahrscheinlich Ihren Bedürfnissen entsprechen. Und ein char (36) im Index ist ein bisschen schwer ... aber auch ein varchar (310) für die E-Mail-Adresse. :)