Ich habe einen Tisch namens provider
. Ich habe drei Säulen genannt person
, place
, thing
. Es kann doppelte Personen, doppelte Orte und doppelte Dinge geben, aber es kann niemals eine doppelte Kombination aus Person, Ort und Ding geben.
Wie würde ich ALTER TABLE ändern, um einen zusammengesetzten Primärschlüssel für diese Tabelle in MySQL mit diesen drei Spalten hinzuzufügen?
@Adrian Cornishs Antwort ist richtig. Das Löschen eines vorhandenen Primärschlüssels hat jedoch noch eine weitere Einschränkung. Wenn dieser Primärschlüssel von einer anderen Tabelle als Fremdschlüssel verwendet wird, wird beim Löschen eine Fehlermeldung angezeigt. In einigen Versionen von MySQL war die dortige Fehlermeldung fehlerhaft (ab 5.5.17 ist diese Fehlermeldung immer noch vorhanden
Wenn Sie einen Primärschlüssel löschen möchten, auf den von einer anderen Tabelle verwiesen wird, müssen Sie zuerst den Fremdschlüssel in dieser anderen Tabelle löschen. Sie können diesen Fremdschlüssel neu erstellen, wenn Sie ihn nach dem erneuten Erstellen des Primärschlüssels noch möchten.
Bei der Verwendung von zusammengesetzten Schlüsseln ist auch die Reihenfolge wichtig. Diese
sind nicht dasselbe. Beide erzwingen die Eindeutigkeit dieser Gruppe von drei Feldern, jedoch gibt es vom Standpunkt der Indizierung einen Unterschied. Die Felder werden von links nach rechts indiziert. Betrachten Sie beispielsweise die folgenden Abfragen:
B kann den Primärschlüsselindex in der ALTER-Anweisung 1 verwenden.
A kann den Primärschlüsselindex in der ALTER-Anweisung 2 verwenden.
C kann einen der beiden Indizes verwenden.
D kann keinen der beiden Indizes verwenden
A verwendet die ersten beiden Felder in Index 2 als Teilindex. A kann Index 1 nicht verwenden, da es den Zwischenplatzteil des Index nicht kennt. Es kann jedoch immer noch möglich sein, einen Teilindex nur für eine Person zu verwenden.
D kann keinen der beiden Indizes verwenden, da er keine Person kennt.
Weitere Informationen finden Sie in den MySQL-Dokumenten hier .
quelle
Vielleicht möchten Sie einfach eine EINZIGARTIGE EINSCHRÄNKUNG. Vor allem, wenn Sie bereits einen Ersatzschlüssel haben. (Beispiel für einen bereits vorhandenen Ersatzschlüssel wäre eine einzelne Spalte, die AUTO_INCREMENT ist.)
Unten finden Sie den SQL-Code für eine eindeutige Einschränkung
quelle
quelle
Es ist definitiv besser, COMPOSITE UNIQUE KEY zu verwenden, wie @GranadaCoder angeboten hat, ein etwas kniffliges Beispiel:
ALTER IGNORE TABLE table_name ADD UNIQUES INDEX idx_name(some_id, another_id, one_more_id);
quelle
ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
quelle