Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

MySQL - Significato di PRIMARY KEY, UNIQUE KEY e KEY se usati insieme durante la creazione di una tabella

Una chiave è solo un normale indice. Un modo per semplificare è pensarlo come un catalogo di carte in una biblioteca. Punta MySQL nella giusta direzione.

Viene utilizzata anche una chiave univoca per migliorare la velocità di ricerca, ma ha il vincolo che non possono esserci elementi duplicati (non ci sono due x e y dove x non è y e x ==y).

Il manuale lo spiega come segue:

Un indice UNIQUE crea un vincolo tale che tutti i valori nell'indice devono essere distinti. Si verifica un errore se si tenta di aggiungere una nuova riga con un valore chiave che corrisponde a una riga esistente. Questo vincolo non si applica ai valori NULL ad eccezione del motore di archiviazione BDB. Per altri motori, un indice UNIQUE consente più valori NULL per colonne che possono contenere NULL. Se specifichi un valore di prefisso per una colonna in un indice UNIQUE, i valori di colonna devono essere univoci all'interno del prefisso.

Una chiave primaria è una chiave univoca "speciale". Fondamentalmente è una chiave univoca, tranne per il fatto che viene utilizzata per identificare qualcosa.

Il manuale spiega come vengono utilizzati gli indici in generale:qui.

In MSSQL, i concetti sono simili. Ci sono indici, vincoli univoci e chiavi primarie.

Non testato, ma credo che l'equivalente MSSQL sia:

CREATE TABLE tmp (
  id int NOT NULL PRIMARY KEY IDENTITY,
  uid varchar(255) NOT NULL CONSTRAINT uid_unique UNIQUE,
  name varchar(255) NOT NULL,
  tag int NOT NULL DEFAULT 0,
  description varchar(255),
);

CREATE INDEX idx_name ON tmp (name);
CREATE INDEX idx_tag ON tmp (tag);

Modifica:il codice sopra è testato per essere corretto; tuttavia, sospetto che ci sia una sintassi molto migliore per farlo. È passato un po' di tempo dall'ultima volta che ho usato SQL Server e apparentemente me ne sono dimenticato un bel po' :).