Ich habe einen Tisch:
table votes (
id,
user,
email,
address,
primary key(id),
);
Jetzt möchte ich die Spalten Benutzer, E-Mail, Adresse eindeutig (zusammen) machen.
Wie mache ich das in MySql?
Natürlich ist das Beispiel nur ... ein Beispiel. Machen Sie sich also bitte keine Sorgen um die Semantik.
Ich habe eine MySQL-Tabelle:
und der EINZIGARTIGE SCHLÜSSEL funktioniert wie erwartet, er erlaubt mehrere NULL-Zeilen von id_box_elements und id_router.
Ich verwende MySQL 5.1.42, daher gab es wahrscheinlich ein Update zu dem oben diskutierten Problem. Zum Glück funktioniert es und hoffentlich bleibt es auch so.
quelle
Mehrspaltige eindeutige Indizes funktionieren in MySQL nicht, wenn Sie einen NULL-Wert in der Zeile haben, da MySQL NULL als eindeutigen Wert behandelt und zumindest derzeit keine Logik hat, um ihn in mehrspaltigen Indizes zu umgehen. Ja, das Verhalten ist verrückt, weil es viele legitime Anwendungen von mehrspaltigen Indizes einschränkt, aber es ist das, was es ist ... Bis jetzt ist es ein Fehler, der mit "wird nicht behoben" auf MySQL gestempelt wurde Bug-Track ...
quelle
ENGINE BDB
und 2) Dies ist ein dokumentiertes Verhalten, obwohl es meiner Meinung nach nicht offen genug dokumentiert ist, da es überraschend / unangenehm sein kann. Eine Diskussion finden Sie unter MySQL-Fehler 25544 bugs.mysql.com/bug.php?id=25544 .Hast du das versucht?
quelle
UNIQUE KEY
thekey` (user
,email
,address
) `. Ich verwende MYSQL Version 5.5.24. Sie können dies sogar in PHPMYADMIN einstellen, wenn Sie es verwenden. Ich verwende die 3.5.1-Version von PMA.Dies funktioniert für MySQL Version 5.5.32
quelle
MySql 5 oder höher verhält sich so (ich habe es gerade getestet):
Beispiel: PRODUCT_NAME, PRODUCT_VERSION 'Glas', null 'Glas', null 'Wein', 1
Wenn Sie nun erneut versuchen, ('Wein' 1) einzufügen, wird eine Einschränkungsverletzung gemeldet. Ich hoffe, dies hilft
quelle
Sie können über phpMyAdmin mehrspaltige eindeutige Indizes hinzufügen . (Ich habe in Version 4.0.4 getestet)
Navigieren Sie zur Strukturseite für Ihre Zieltabelle. Fügen Sie einer der Spalten einen eindeutigen Index hinzu. Erweitern Sie die Liste " Indizes" unten auf der Strukturseite, um den soeben hinzugefügten eindeutigen Index anzuzeigen. Klicken Sie auf das Bearbeitungssymbol. Im folgenden Dialogfeld können Sie diesem eindeutigen Index zusätzliche Spalten hinzufügen.
quelle
So mach ich es:
Meine Konvention für ein einzigartiges
index_name
istTableName_Column1_Column2_Column3_uindex
.quelle
Zum Hinzufügen eines eindeutigen Index sind folgende Elemente erforderlich:
1) Tabellenname
2) Indexname
3) Spalten, für die Sie einen Index hinzufügen möchten
In Ihrem Fall können wir einen eindeutigen Index wie folgt erstellen:
quelle
Wenn Sie in Zukunft Duplikate vermeiden möchten. Erstellen Sie eine weitere Spalte mit der Bezeichnung id2.
Fügen Sie nun das Unikat in zwei Spalten hinzu:
quelle
Wenn Sie eine Tabelle in MySQL erstellen, verwenden Sie Folgendes:
quelle
Entfernen Sie zuerst vorhandene Duplikate
Fügen Sie dann die eindeutige Einschränkung hinzu
Überprüfen Sie die Einschränkung mit
Beachten Sie, dass Benutzer, E-Mail-Adresse und Adresse als eindeutig betrachtet werden, wenn einer von ihnen den Wert Null hat.
quelle
Für PostgreSQL ... Bei Index hat es bei mir nicht funktioniert. es gab mir einen Fehler, also tat ich dies:
PostgreSQL gab dem eindeutigen Index einen eigenen Namen. Ich denke, Sie können den Namen des Index in den Optionen für die Tabelle ändern, wenn er geändert werden muss ...
quelle