Tento článek obsahuje základní SQL CREATE TABLE
příkazy, které mohou začátečníci použít k vytvoření základních tabulek pro své databázové projekty.
Základní syntaxe
Základní syntaxe pro vytváření tabulek v SQL vypadá takto:
CREATE TABLE TableName (
Column1 datatype optional_constraints,
Column2 datatype optional_constraints,
Column3 datatype optional_constraints,
...
);
Kde:
TableName
je jméno, které chcete dát stoluColumn1
, atd. jsou názvy, které dáváte svým sloupcůmdatatype
je datový typ, který přiřadíte každému sloupci. Většina RDBMS vyžaduje, abyste každému sloupci přiřadili datový typ. V SQLite je to volitelné.optional_constraints
je volitelný seznam omezení, která aplikujete na sloupec.
Všimněte si, že většina DBMS používá složitější syntaxi než tato (tj. nabízejí více možností), ale obecně se jedná o základní syntaxi potřebnou k vytvoření tabulky. Většina začátečníků začíná s touto syntaxí a postupně se učí pokročilejší možnosti.
Základní příklad
Zde je základní příklad:
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
);
Zde je několik poznámek:
- Názvy tabulek a sloupců mohou být v každém případě. Například místo
PetId
Mohl jsem to nazvatpetid
,PETID
, nebopet_id
. Některé DBMS (např. Postgres) rozlišují velká a malá písmena při dotazu na tabulky a jejich názvy sloupců, zatímco jiné nikoli (např. SQL Server). - Některé systémy DBMS používají pro své datové typy různé názvy.
NOT NULL
je omezení tabulky, které určuje, že tento sloupec musí obsahovat hodnotu (tj. nemůže obsahovatNULL
hodnoty).NULL
znamená, že sloupec může obsahovatNULL
hodnoty. Některé DBMS (například DB2) nepodporujíNULL
klíčové slovo, a proto jej budete muset při práci s takovými DBMS vynechat.PRIMARY KEY
přidá do tabulky omezení primárního klíče. Je dobrým zvykem zadat primární klíč na všech vašich tabulkách.- Pokud tabulka se stejným názvem již v databázi existuje, zobrazí se chyba. Stávající tabulku budete muset zrušit nebo ji upravit (nebo změnit název vytvářené tabulky).
Vytvořte tabulku s cizími klíči
Následující příklad vytvoří tabulku se dvěma cizími klíči. Cizí klíče se používají k vytvoření vztahu mezi dvěma tabulkami.
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
);
REFERENCES
klauzule se používá k definování cizího klíče proti dvěma sloupcům. V našem případě cizí klíče vynucují následující:
Pets.PetTypeId
sloupec odkazuje naPetTypes.PetTypeId
(jakákoli hodnota, která jde doPets.PetTypeId
sloupec musí mít odpovídající hodnotu vPetTypes.PetTypeId
sloupec).Pets.OwnerId
sloupec odkazuje naOwners.OwnerId
(jakákoli hodnota, která jde doPets.OwnerId
sloupec musí mít odpovídající hodnotu vOwners.OwnerId
sloupec).
Cizí klíče lze také přidat později pomocí ALTER TABLE
prohlášení, je-li požadováno.
Vytvořte tabulku s DEFAULT omezením
Následující příklad vytvoří tabulku s DEFAULT
omezení.
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
);
Vytvořte tabulku se sloupcem časového razítka
Můžete použít DEFAULT
omezení automaticky vložit aktuální datum a čas do sloupce při každém vložení nového řádku. To se často nazývá vložení časového razítka.
Různé DBMS používají různé funkce k vrácení aktuálního data.
Zde je příklad, jak to udělat v 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
);
V SQL Server, CURRENT_TIMESTAMP
je ekvivalentem ANSI GETDATE()
funkce.
Alternativně můžete použít SYSDATETIME()
pro vyšší přesnost časového razítka:
CREATE TABLE Users
(
UserId int NOT NULL PRIMARY KEY,
FirstName varchar(60) NOT NULL,
LastName varchar(60) NOT NULL,
DateInserted datetime2 DEFAULT SYSDATETIME()
);
Aby byla zajištěna vyšší přesnost, musí být datový typ sloupce datetime2 .
SQL Server má poměrně málo datových typů pro hodnoty data/času. Seznam funkcí data a času serveru SQL Server.
Každý DBMS má své vlastní funkce pro vrácení data a času. Zde je seznam těch hlavních:
DB2 | CURRENT_DATE |
MySQL | CURRENT_DATE nebo NOW() |
Oracle | SYSDATE |
PostgreSQL | CURRENT_DATE |
SQL Server | CURRENT_TIMESTAMP , GETDATE() nebo SYSDATETIME() |
SQLite | datetime('now') |
Viz také:
- Funkce data a času serveru SQL Server
- Funkce data a času SQLite
Vytvořte sloupec s automaticky se zvyšující hodnotou
Někdy je potřeba vytvořit sloupec, který automaticky zvýší hodnotu při každém vložení nového řádku. Ty se obvykle označují jako sloupce „automatický přírůstek“ nebo „identita“ v závislosti na používaném systému DBMS.
V SQL Server použijte IDENTITY
argument:
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()
);
V tomto případě použijeme IDENTITY(1,1)
.
- První
1
je semeno. To určuje, jakou hodnotu má začít počítání (tj. jedná se o hodnotu úplně prvního řádku vloženého do tabulky). - Druhý
1
je přírůstek. Toto je přírůstková hodnota přidaná k hodnotě identity předchozího načteného řádku.
Každý DBMS má své vlastní klíčové slovo pro vytvoření automaticky se zvyšujícího sloupce.
- V MySQL a MariaDb použijte
AUTO_INCREMENT
- V SQLite máte několik možností (včetně
AUTOINCREMENT
klíčové slovo) - V PostgreSQL použijte
SERIAL
- Z databáze Oracle 12c , můžete nyní použít klíčové slovo IDENTITY pro vytváření automaticky se zvyšujících sloupců. Příklad může vypadat takto:
UserId NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY
Pokročilé možnosti
Většina DBMS umožňuje zadat pokročilé možnosti při vytváření tabulek. Dostupné možnosti budou do značné míry záviset na vašem DBMS.
Pokud potřebujete možnosti, které nejsou uvedeny v tomto článku, nahlédněte do dokumentace k DBMS.
Mnoho pokročilých možností lze nastavit prostřednictvím GUI (v závislosti na nástroji, který používáte pro připojení k databázi). Tabulku můžete vždy vytvořit nebo upravit pomocí GUI a poté použijte možnost „Script as Create“ (nebo podobnou) k zobrazení kódu SQL, který byste museli spustit, abyste takovou tabulku vytvořili. Můžete vzít tento kód a změnit názvy tabulek, názvy sloupců atd., abyste vytvořili zcela novou tabulku na základě definice předchozí.