Questo articolo contiene CREATE TABLE
SQL di base istruzioni che i principianti possono utilizzare per creare tabelle di base per i loro progetti di database.
Sintassi di base
La sintassi di base per la creazione di tabelle in SQL è la seguente:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Dove:
TableName
è il nome che vuoi dare al tavoloColumn1
, etc sono i nomi che dai alle tue colonnedatatype
è il tipo di dati che assegni a ciascuna colonna. La maggior parte degli RDBMS richiedono l'assegnazione di un tipo di dati a ciascuna colonna. In SQLite, è facoltativo.optional_constraints
è un elenco facoltativo di vincoli da applicare a una colonna.
Nota che la maggior parte dei DBMS utilizza una sintassi più complessa di questa (cioè offrono più opzioni), ma questa è generalmente la sintassi di base richiesta per creare una tabella. La maggior parte dei principianti inizia con questa sintassi, quindi apprende opzioni più avanzate man mano che avanza.
Esempio di base
Ecco un esempio di base:
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL,
OwnerId int NOT NULL,
PetName varchar(60) NOT NULL,
DOB date NULL
);
Ecco alcuni punti da notare:
- I nomi di tabelle e colonne possono essere comunque. Ad esempio, invece di
PetId
Avrei potuto chiamarlopetid
,PETID
opet_id
. Alcuni DBMS (ad es. Postgres) fanno distinzione tra maiuscole e minuscole quando esegui query sulle tabelle e sui nomi delle colonne, mentre altri no (ad es. SQL Server). - Alcuni DBMS utilizzano nomi diversi per i loro tipi di dati.
NOT NULL
è un vincolo di tabella che specifica che questa colonna deve contenere un valore (cioè non può contenereNULL
valori).NULL
significa che la colonna può contenereNULL
valori. Alcuni DBMS (come DB2) non supportano ilNULL
parola chiave, quindi sarà necessario ometterla quando si lavora con tali DBMS.PRIMARY KEY
aggiunge un vincolo di chiave primaria alla tabella. È buona norma specificare una chiave primaria su tutte le tabelle.- Se esiste già una tabella con lo stesso nome nel database, riceverai un errore. Dovrai eliminare la tabella esistente o modificarla (o cambiare il nome di quella che stai creando).
Crea una tabella con chiavi esterne
L'esempio seguente crea una tabella con due chiavi esterne. Le chiavi esterne vengono utilizzate per creare una relazione tra due tabelle.
CREATE TABLE Pets
(
PetId int NOT NULL PRIMARY KEY,
PetTypeId int NOT NULL REFERENCES PetTypes (PetTypeId),
OwnerId int NOT NULL REFERENCES Owners (OwnerId),
PetName varchar(60) NOT NULL,
DOB date NULL
);
I REFERENCES
La clausola viene utilizzata per definire una chiave esterna su due colonne. Nel nostro caso, le chiavi esterne impongono quanto segue:
- Il
Pets.PetTypeId
la colonna fa riferimento aPetTypes.PetTypeId
colonna (qualsiasi valore che va inPets.PetTypeId
la colonna deve avere un valore corrispondente inPetTypes.PetTypeId
colonna). - Il
Pets.OwnerId
la colonna fa riferimento aOwners.OwnerId
colonna (qualsiasi valore che va inPets.OwnerId
la colonna deve avere un valore corrispondente inOwners.OwnerId
colonna).
Le chiavi esterne possono essere aggiunte anche in un secondo momento, utilizzando il ALTER TABLE
dichiarazione se richiesta.
Crea una tabella con il vincolo DEFAULT
L'esempio seguente crea una tabella con un DEFAULT
vincolo.
CREATE TABLE OrderItems
(
OrderId int NOT NULL PRIMARY KEY,
OrderItem int NOT NULL,
ProductId int NOT NULL,
Quantity int NOT NULL DEFAULT 1,
ItemPrice decimal(8,2) NOT NULL
);
Crea una tabella con una colonna timestamp
Puoi usare DEFAULT
vincoli per inserire automaticamente la data e l'ora correnti in una colonna ogni volta che viene inserita una nuova riga. Questo è spesso indicato come inserimento di un timestamp.
Diversi DBMS utilizzano funzioni diverse per restituire la data corrente.
Ecco un esempio di come farlo in SQL Server.
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime DEFAULT CURRENT_TIMESTAMP
);
In SQL Server, CURRENT_TIMESTAMP
è l'equivalente ANSI di GETDATE()
funzione.
In alternativa puoi usare SYSDATETIME()
per un timestamp di maggiore precisione:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
Per supportare una maggiore precisione, il tipo di dati della colonna deve essere datetime2 .
SQL Server ha diversi tipi di dati per i valori di data/ora. Consulta le funzioni di data e ora di SQL Server per un elenco.
Ogni DBMS ha le sue funzioni per restituire la data e l'ora. Ecco un elenco dei principali:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE o NOW() |
Oracolo | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL Server | CURRENT_TIMESTAMP , GETDATE() o SYSDATETIME() |
SQLite | datetime('now') |
Vedi anche:
- Funzioni di data e ora di SQL Server
- Funzioni di data e ora di SQLite
Crea una colonna con un valore incrementale automaticamente
A volte è necessario creare una colonna che incrementi automaticamente un valore ogni volta che viene inserita una nuova riga. Queste sono generalmente denominate colonne di "incremento automatico" o "identità", a seconda del DBMS utilizzato.
In SQL Server, usa IDENTITY
argomento:
CREATE TABLE Users
(
UserId int NOT NULL IDENTITY(1,1) PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
In questo caso, utilizziamo IDENTITY(1,1)
.
- Il primo
1
è il seme. Questo specifica quale valore deve iniziare il conteggio (cioè questo è il valore della prima riga inserita nella tabella). - Il secondo
1
è l'incremento. Questo è il valore incrementale aggiunto al valore di identità della riga precedente caricata.
Ogni DBMS ha la propria parola chiave per la creazione di una colonna con incremento automatico.
- In MySQL e MariaDb, usa
AUTO_INCREMENT
- In SQLite, hai un paio di opzioni (incluso
AUTOINCREMENT
parola chiave) - In PostgreSQL, usa
SERIAL
- Da Oracle Database 12c , ora puoi utilizzare la parola chiave IDENTITY per creare colonne a incremento automatico. Un esempio potrebbe essere:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Opzioni avanzate
La maggior parte dei DBMS consente di specificare opzioni avanzate durante la creazione di tabelle. Le opzioni disponibili dipenderanno in gran parte dal tuo DBMS.
Fare riferimento alla documentazione del DBMS se sono necessarie opzioni non specificate in questo articolo.
Molte opzioni avanzate possono essere impostate tramite la GUI (a seconda dello strumento utilizzato per la connessione al database). Puoi sempre creare o modificare una tabella tramite la GUI, quindi utilizzare la sua opzione "Script as Create" (o simile) per vedere il codice SQL che dovresti eseguire per creare una tabella di questo tipo. Puoi prendere questo codice e modificare i nomi delle tabelle, i nomi delle colonne, ecc. per creare una tabella completamente nuova basata sulla definizione della precedente.