web-dev-qa-db-de.com

MySQL - Machen Sie ein Wertepaar einzigartig

Ich habe eine Tabelle mit zwei int-Werten, die IDs sind. Alleine diese IDs können in der Tabelle beliebig oft vorkommen, zusammen sollten sie jedoch nur einmal vorkommen.

Gibt es eine Möglichkeit, ein Wertepaar eindeutig zu machen und trotzdem die einzelnen Werte mehrfach anzeigen zu lassen?

Wenn dies möglich ist, kann das Wertepaar dann als Schlüssel verwendet werden? Ich habe derzeit eine 3. Spalte für einen eindeutigen Auto-Inkrement-Wert für meinen Schlüssel.

35
Josh Brittain

Es wird ein zusammengesetzter Schlüssel genannt.

Wenn Sie Ihre tatsächliche PK in eine zusammengesetzte PK ändern möchten, verwenden Sie

Alter table <your table> drop PRIMARY KEY;
Alter table <your table> drop COLUMN <your autoincremented column>;

Alter table <your table> add [constraint <constraint name>] PRIMARY KEY (<col1>, <col2>);

Sie können auch nur eine eindeutige Einschränkung hinzufügen (Ihre PK wird gleich sein und eindeutige Paare ... müssen eindeutig sein).

alter table <your table> add [constraint <constraint name>] unique index(<col1>, <col2>);

Persönlich würde ich die zweite Lösung empfehlen (einfache PK + eindeutige Einschränkung), aber das ist nur eine persönliche Sichtweise. Sie können nach Argumenten für Vor- und Nachteile über zusammengesetzte Schlüssel suchen.

Der Teil zwischen [] ist optional.

EDIT

Wenn Sie dies in der Anweisung create table tun möchten

Für ein zusammengesetztes Paket

CREATE TABLE Test(
    id1 int NOT NULL, 
    id2 int NOT NULL,
    id3 int NOT NULL,
    PRIMARY KEY (id1, id2)
);

Für einen eindeutigen Index

CREATE TABLE Test1(
    id1 int NOT NULL AUTO_INCREMENT, 
    id2 int NOT NULL,
    id3 int NOT NULL,
    PRIMARY KEY (id1),
    UNIQUE KEY (id2, id3)
);
57

Versuchen Sie folgendes: ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)

8

fügen Sie primary key (col1, col2) zu Ihrer Definitionstabelle hinzu

0
jspcal