2012-08-25 11 views
10

C'è un modo in MySQL per avere due chiavi univoche e collegarle in qualche modo?mysql combinazione di tasti univoci

per esempio se ho la seguente tabella e 'title'and 'store' sono un chiavi univoche

id | category | title  | price | store 
1 | outdoors | fishing rod | 59.99 | wal-mart 
2 | auto  | Penzoil Oil | 9.99 | target 

e cerco di inserire il seguente record. Questo nuovo record verrebbe ignorato perché il titolo è "canna da pesca" e il negozio è 'Wal-Mart' e non v'è un record esistente con quel titolo e conservare

| outdoors | fishing rod | 30.99 | wal-mart 

ma se ho cercato di inserire il seguente record sarebbe stato accettato perché non c'è un record che esiste con il titolo di "canna da pesca" e vendite di "target"

| outdoors | fishing rod | 30.99 | target 

questo è possibile solo con MySQL?

risposta

22

È possibile definire un indice su più colonne, per es .:

CREATE UNIQUE INDEX arbitrary_index_name ON table_name (title, store); 
6

Sì. Invece di due vincoli univoci separati, è necessario creare un unico vincolo univoco su entrambe le colonne.

La sintassi è CREATE INDEX:

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name 
    [index_type] 
    ON tbl_name (index_col_name,...) 
    [algorithm_option | lock_option] ... 

Per esempio, sarebbe simile a questa:

CREATE UNIQUE INDEX index_name ON tbl_name (title,store); 

Avrete anche far cadere i due indici univoci non corretti che si è creato.

Vedere documentation per ulteriori dettagli su come creare indici.

+0

+1 per eliminare gli attuali indici univoci – Bugs

-1

Sì, è possibile!

ALTER TABLE table_name DROP PRIMARY KEY; 
ALTER TABLE table_name ADD PRIMARY KEY(title, store); 
+2

Questa è una cattiva idea. Una chiave primaria numerica presenta molti vantaggi, come la consistenza (la maggior parte delle tabelle ce l'ha) e la semplicità. – Bugs

1

ALTER TABLE ADD table_name indice univoco (title, store);

+0

Puoi qualche informazione aggiuntiva su come il tuo codice fornisce e rispondere alla domanda? –

Problemi correlati