Frage

Ich habe eine Tabelle:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

Jetzt will ich die Spalten machen Benutzer, E-Mail, Adresse einzigartig (zusammen).

Wie kann ich das in MySql?

  • Natürlich ist das Beispiel nur ... ein Beispiel. Also bitte keine Sorgen über die Semantik.
War es hilfreich?

Lösung

ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

Andere Tipps

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 eindeutige Schlüssel funktioniert wie erwartet, kann es mehr NULL Reihen von id_box_elements und id_router.

Ich bin mit MySQL 5.1.42, also wahrscheinlich war es eine Aktualisierung auf die Frage oben diskutiert. Zum Glück funktioniert es und es wird hoffentlich auch so bleiben.

Multi Spalte eindeutige Indizes funktioniert nicht in MySQL, wenn Sie einen NULL-Wert in der Zeile haben wie MySQL NULL als einen eindeutigen Wert behandelt und zumindest hat derzeit keine Logik um es in mehrspaltigen Indizes zu arbeiten. Ja das Verhalten verrückt ist, weil es eine Menge legitimer Anwendungen von mehrspaltigen Indizes begrenzt, aber es ist, was es ist ... Bis jetzt ist es ein Fehler, der mit auf dem MySQL abgestempelt wurde „nicht fix“ Bug-Track ...

Haben Sie versucht das?

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 mehrspaltige eindeutige Indizes über phpMyAdmin hinzufügen. (I getestet in Version 4.0.4)

Navigieren Sie zu der Struktur für Ihre Zieltabelle. Fügen Sie einen eindeutigen Index zu einer der Spalten. Erweitern Sie die Indizes Liste auf der Unterseite der Struktur Seite den eindeutigen Index Sie gerade hinzugefügt haben, um zu sehen. Klicken Sie auf das Bearbeiten-Symbol, und im folgenden Dialog können Sie zusätzliche Spalten zu diesem eindeutigen Index hinzuzufügen.

MySql 5 oder höher benimmt sich wie folgt aus (Ich habe gerade getestet):

  • Sie können eindeutige Einschränkungen die NULL festlegbare Spalten definieren. Angenommen, Sie definieren eine Einschränkung eindeutig (A, B), wobei A keine Nullwerte enthalten ist, aber B ist
  • , wenn eine solche Einschränkung Auswertung können Sie (A, null) so oft Sie wollen (gleiche A-Wert!)
  • Sie können nur einen haben (A, nicht null B) Paar

Beispiel: PRODUCT_NAME, PRODUCT_VERSION 'Glas', null 'Glas', null 'Wein', 1

Nun, wenn Sie einfügen versuchen ( ‚Wein‘ 1) wieder wird es eine Einschränkungsverletzung melden Hoffe, das hilft

Ich mache es wie folgt aus:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

Meine Konvention für ein einzigartiges index_name ist TableName_Column1_Column2_Column3_uindex.

Wenn Sie Duplikate in Zukunft zu vermeiden. Erstellen Sie eine weitere Spalte sagen id2.

UPDATE tablename SET id2 = id;

Nun fügen Sie die einzigartige auf zwei Säulen:

alter table tablename add unique index(columnname, id2);

Für das Hinzufügen eindeutigen Index Folgendes erforderlich:

1) table_name
2) index_name
3) Säulen, auf denen Sie wollen Index hinzufügen

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

In Ihrem Fall können wir einen eindeutigen Index erstellen, wie folgt:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

Wenn Sie Tabelle erstellen in MySQL verwenden Sie dann folgendermaßen vor:

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)
);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top