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
PetIdAvrei potuto chiamarlopetid,PETIDopet_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ò contenereNULLvalori).NULLsignifica che la colonna può contenereNULLvalori. Alcuni DBMS (come DB2) non supportano ilNULLparola chiave, quindi sarà necessario ometterla quando si lavora con tali DBMS.PRIMARY KEYaggiunge 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.PetTypeIdla colonna fa riferimento aPetTypes.PetTypeIdcolonna (qualsiasi valore che va inPets.PetTypeIdla colonna deve avere un valore corrispondente inPetTypes.PetTypeIdcolonna). - Il
Pets.OwnerIdla colonna fa riferimento aOwners.OwnerIdcolonna (qualsiasi valore che va inPets.OwnerIdla colonna deve avere un valore corrispondente inOwners.OwnerIdcolonna).
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
AUTOINCREMENTparola 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.