2010-09-22 19 views
7

ciao voglio sapere che è possibile creare una chiave primaria in una tabella in mysql. se sì per favore dimmi il concetto dietro questo. perché ho visto una tabella in cui due chiave primaria è lì con nessun incremento automatico impostatoè possibile creare due chiavi primarie in una tabella

+0

Ho anche visto questo. Ma in SQL Server. –

risposta

8

si può avere solo 1 chiave primaria, ma:

  • è possibile combinare più di una colonna ad essere la chiave primaria (forse è questo quello che avete visto)
  • la chiave primaria non deve essere un autoincremento, deve solo essere univoca
  • è possibile aggiungere più di un indice a una o più colonne per accelerare le istruzioni SELECT (ma rallentare INSERT/UPDATE)
  • questi indici possono essere contrassegnati come univoci, che significa s non lasciano si inserisce una seconda fila con lo stesso contenuto nell'indice campi (proprio come una chiave primaria)
1

È possibile utilizzare più colonne per la chiave primaria in questo modo:

CREATE TABLE 
    newTable 
    (field1 INT(11) 
    , field2 INT(11) 
    , field3 VARCHAR(5) 
    , field4 BLOB 
    , PRIMARY KEY (field2, field1, field3) <==== 
    ) 
3

No, ma è possibile avere altri indici UNIQUE sul tavolo, oltre al PRIMARY KEY. UNIQUE + NOT NULL è fondamentalmente la stessa di una chiave primaria.

Quello che hai visto è probabilmente una chiave primaria composta (più di una colonna che costituisce la chiave univoca).

1

Una tabella può avere un singolo tasto PRIMARY, che può essere costituito da una o più colonne. Una tabella può avere anche un numero di chiavi aggiuntive definite come vincoli UNIQUE KEY.

Dalla descrizione non è chiaro se si stesse guardando un tavolo con più chiavi definite o una tabella con un PRIMARY KEY a più colonne.

2

Utilizzare una chiave primaria composita ...

ad es.

CREATE TABLE table1 ( 
    first_id int unsigned not null, 
    second_id int unsigned not null auto_increment, 
    user_id int unsigned not null, 
    desc text not null, 
PRIMARY KEY(first_id, second_id)); 

Inoltre, controllare l'esempio here

Problemi correlati