MySQL Creazione di tabelle con chiave primaria


Esempio

CREATE TABLE Person (
    PersonID     INT UNSIGNED NOT NULL,
    LastName     VARCHAR(66) NOT NULL,
    FirstName    VARCHAR(66),
    Address      VARCHAR(255),
    City         VARCHAR(66),
    PRIMARY KEY (PersonID)
);

Una chiave primaria è un singolo NOT NULL o un identificatore a più colonne che identifica in modo univoco una riga di una tabella. Viene creato un indice e, se non dichiarato esplicitamente come NOT NULL , MySQL lo dichiarerà in modo così silenzioso e implicito.

Una tabella può avere solo una PRIMARY KEY e ad ogni tabella si consiglia di averne una. InnoDB ne creerà automaticamente uno in sua assenza (come visto nella documentazione di MySQL ) anche se questo è meno desiderabile.

Spesso, un AUTO_INCREMENT INT noto anche come "chiave surrogata", viene utilizzato per l'ottimizzazione dell'indice sottile e le relazioni con altre tabelle. Questo valore aumenterà (normalmente) di 1 ogni volta che viene aggiunto un nuovo record, a partire da un valore predefinito di 1.

Tuttavia, nonostante il suo nome, non è suo scopo garantire che i valori siano incrementali, ma semplicemente che siano sequenziali e unici.

Un valore INT autoincremento non verrà ripristinato al valore iniziale predefinito se tutte le righe della tabella vengono eliminate, a meno che la tabella non venga troncata utilizzando l'istruzione TRUNCATE TABLE .

Definizione di una colonna come chiave primaria (definizione in linea)

Se la chiave primaria è costituita da una singola colonna, la clausola PRIMARY KEY può essere posizionata in linea con la definizione della colonna:

CREATE TABLE Person (
    PersonID     INT UNSIGNED NOT NULL PRIMARY KEY,
    LastName     VARCHAR(66) NOT NULL,
    FirstName    VARCHAR(66),
    Address      VARCHAR(255),
    City         VARCHAR(66)
);

Questa forma del comando è più breve e più facile da leggere.

Definizione di una chiave primaria a più colonne

È anche possibile definire una chiave primaria comprendente più di una colonna. Questo potrebbe essere fatto ad esempio sulla tabella figlio di una relazione di chiave esterna. Una chiave primaria a più colonne viene definita elencando le colonne partecipanti in una clausola PRIMARY KEY separata. La sintassi inline non è consentita qui, poiché solo una colonna può essere dichiarata PRIMARY KEY linea. Per esempio:

CREATE TABLE invoice_line_items (
    LineNum      SMALLINT UNSIGNED NOT NULL,
    InvoiceNum   INT UNSIGNED NOT NULL,
    -- Other columns go here
    PRIMARY KEY (InvoiceNum, LineNum),
    FOREIGN KEY (InvoiceNum) REFERENCES -- references to an attribute of a table
);

Si noti che le colonne della chiave primaria devono essere specificate nell'ordine di ordinamento logico, che potrebbe essere diverso dall'ordine in cui sono state definite le colonne, come nell'esempio sopra riportato.

Gli indici più grandi richiedono più spazio su disco, memoria e I / O. Pertanto le chiavi dovrebbero essere il più piccole possibile (specialmente per quanto riguarda le chiavi composte). In InnoDB, ogni "indice secondario" include una copia delle colonne del PRIMARY KEY .