Bedingte Verbundschlüssel in MySQL?
-
20-09-2019 - |
Frage
Also habe ich diese Tabelle mit einem zusammengesetzten Schlüssel haben, im Grunde ‚userID‘ - ‚data‘ muss eindeutig sein (siehe meine andere Frage SQL-Tabelle - halb einzigartige Reihe )
Allerdings habe ich mich gefragt, ob es möglich war, nur um diese in Kraft treten, wenn Benutzer-ID nicht Null ist? Damit meine ich, ‚userID‘ - ‚data‘ muss für Nicht-Null-Benutzer-IDs eindeutig sein
Oder bin ich den Holzweg?
Danke
Mala
Lösung
anwenden SQL-Constraints für jede Zeile in der Tabelle. Sie können sie nicht davon abhängig machen, basierend auf bestimmten Datenwerte.
Wenn Sie jedoch NULL
statt Null verwenden könnte, können Sie die eindeutige Einschränkung umgehen. Eine eindeutige Einschränkung ermöglicht es, mehrere Einträge, die NULL
haben. Der Grund dafür ist, dass Einzigartigkeit Mittel nicht zwei gleiche Werte existieren können. Gleichheit bedeutet value1 = value2
wahr sein muss. Aber in SQL, NULL = NULL
ist unbekannt , nicht wahr.
CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64));
INSERT INTO MyTable (userid, data) VALUES ( 1, 'foo');
INSERT INTO MyTable (userid, data) VALUES ( 1, 'bar');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
So weit so gut, jetzt könnte man denken, die folgenden Anweisungen auf die eindeutige Einschränkung verletzen, aber sie tun nicht:
INSERT INTO MyTable (userid, data) VALUES ( 1, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');