Ich habe einen Tisch:
table votes (
id,
user,
email,
address,
primary key(id),
);
Nun möchte ich die Spalten Benutzer, E-Mail, Adresse eindeutig machen (zusammen).
Wie mache ich das in MySql?
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
Ich habe eine MySQL-Tabelle:
CREATE TABLE `content_html` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_box_elements` int(11) DEFAULT NULL,
`id_router` int(11) DEFAULT NULL,
`content` mediumtext COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);
und der UNIQUE KEY funktioniert genau 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 so.
Mehrspalten-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 in mehrspaltigen Indizes vorhanden ist. Ja, das Verhalten ist verrückt, weil es viele legitime Anwendungen von mehrspaltigen Indizes einschränkt, aber es ist, was es ist ... Bis jetzt ist es ein Fehler, der mit "wird nicht behoben" auf MySQL gestempelt wurde Bug-Track ...
Hast du das probiert?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
Dies funktioniert für MySQL-Version 5.5.32
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
Sie können über phpMyAdmin mehrere eindeutige Indizes mit mehreren Spalten hinzufügen. (Ich habe in Version 4.0.4 getestet)
Navigieren Sie zur Seite Struktur Ihrer Zieltabelle. Fügen Sie einer der Spalten einen eindeutigen Index hinzu. Erweitern Sie die Liste Indexes unten auf der Strukturseite, um den soeben hinzugefügten eindeutigen Index anzuzeigen. Klicken Sie auf das Bearbeitungssymbol und im folgenden Dialogfeld können Sie diesem eindeutigen Index weitere Spalten hinzufügen.
MySql 5 oder höher verhält sich so (ich habe es gerade getestet):
Beispiel: PRODUCT_NAME, PRODUCT_VERSION 'Glass', null 'Glass', null 'Wine', 1
Wenn Sie nun erneut versuchen, ('wine' 1) einzufügen, wird eine Einschränkungsverletzung gemeldet. __ Hoffen Sie, dass dies hilft
So mach ich es:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
Meine Konvention für einen eindeutigen index_name
ist TableName_Column1_Column2_Column3_uindex
.
Für das Hinzufügen eines eindeutigen Indexes ist Folgendes erforderlich:
1) tabellenname
2) Indexname
3) Spalten, zu denen Sie einen Index hinzufügen möchten
ALTER TABLE `tablename`
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);
In Ihrem Fall können wir einen eindeutigen Index wie folgt erstellen:
ALTER TABLE `votes`ADD
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);
Wenn Sie in Zukunft Duplikate vermeiden möchten. Erstellen Sie eine weitere Spalte, z. B. id2.
UPDATE tablename SET id2 = id;
Fügen Sie nun das Unique in zwei Spalten hinzu:
alter table tablename add unique index(columnname, id2);
Wenn Sie eine Tabelle in mysql erstellen, verwenden Sie Folgendes:
create table package_template_mapping (
mapping_id int(10) not null auto_increment ,
template_id int(10) NOT NULL ,
package_id int(10) NOT NULL ,
remark varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);