Vědět, jak vytvářet tabulky v SQL
je důležitý a základní koncept.
V tomto tutoriálu vás provedu SQL
syntaxe pro CREATE TABLE
pomocí příkladů kódu pro PostgreSQL i MySQL.
Základní CREATE TABLE
Syntaxe
Zde je základní syntaxe CREATE TABLE
prohlášení:
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
V první části musíte začít s CREATE TABLE
příkaz následovaný názvem tabulky, kterou chcete vytvořit.
Pokud bych chtěl vytvořit tabulku informací o učiteli, pak bych napsal něco takového:
CREATE TABLE teachers();
Uvnitř závorky přidáte informace pro vytvoření sloupců pro tabulku. Pokud zapomenete závorku, zobrazí se chybová zpráva.
CREATE TABLE teachers;
Středník na konci závorky říká počítači, že jde o konec SQL
prohlášení. Někdy to uslyšíte označované jako terminátor příkazů.
Co jsou MySQL
úložné motory?
Podle MySQL
dokumentace:
Storage engine jsou komponenty MySQL, které zpracovávají operace SQL pro různé typy tabulek.
MySQL
používá tyto úložné stroje k provádění operací CRUD (vytváření, čtení, aktualizace a odstraňování) v databázi.
V MySQL
, máte možnost určit typ úložiště, které chcete pro svůj stůl použít. Pokud vynecháte ENGINE
klauzule, pak výchozí bude InnoDB.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
)ENGINE=storage_engine;
Co je to IF NOT EXISTS
klauzule?
Je zde volitelná klauzule nazvaná IF NOT EXISTS
který zkontroluje, zda tabulka, kterou chcete vytvořit, již v databázi existuje. Tuto klauzuli můžete umístit těsně před název tabulky.
CREATE TABLE IF NOT EXISTS teachers();
Pokud tabulka již existuje, počítač novou tabulku nevytvoří.
Pokud vynecháte IF NOT EXISTS
klauzule a pokuste se vytvořit tabulku, která již v databázi existuje, pak se zobrazí chybová zpráva.
V tomto příkladu jsem nejprve vytvořil tabulku s názvem učitelé. Ale pokud se pokusím vytvořit stejnou tabulku v dalším příkazu, narazím na chybu.
CREATE TABLE IF NOT EXISTS teachers();
CREATE TABLE teachers();
Jak vytvořit sloupce v tabulce
Uvnitř závorky pro CREATE TABLE
vypíšete názvy sloupců, které chcete vytvořit, spolu s jejich datovými typy a omezeními.
Toto je příklad toho, jak můžeme přidat čtyři sloupce school_id
, name
, email
a age
k našemu učitelskému stolu. Každý název sloupce by měl být oddělen čárkami.
CREATE TABLE teachers(
school_id data_type column_constraint,
name data_type column_constraint,
email data_type column_constraint,
age data_type column_constraint
);
Podle MySQL
dokumentace:
MySQL má pevný limit 4096 sloupců na tabulku, ale efektivní maximum může být pro danou tabulku menší. Přesný limit sloupců závisí na několika faktorech.
Pokud pracujete na menším MySQL
osobních projektů, pak se pravděpodobně nebudete muset bát překročení počtu sloupců pro vaše tabulky.
Podle dokumentace PostgreSQL je limit 1600 sloupců na tabulku. Podobné jako MySQL
, přesný limit se může lišit v závislosti na prostoru na disku nebo omezení výkonu.
Datové typy v SQL
Když vytváříte sloupce v tabulce, musíte jí přiřadit datový typ. Datové typy popisují typ hodnoty uvnitř sloupců.
Zde je šest oblíbených kategorií datových typů v SQL
:
- Číselné (int, float, sériové, desítkové atd.)
- Data a čas (časové razítko, data, čas atd.)
- Znak a řetězec (znak, varchar, text atd.)
- Unicode (ntext, nvarchar atd.)
- Binární (binární atd.)
- Různé (xml, tabulka atd.)
Tento článek nebude procházet každý jednotlivý typ dat, ale pokryje některé z populárních.
Zde je úplný seznam PostgreSQL
datové typy a MySQL
typy dat.
Co je SERIAL
a AUTO_INCREMENT
?
V PostgreSQL
, SERIAL
datový typ je celé číslo, které se automaticky zvýší o jednu pro každý nový vytvořený řádek.
Můžeme přidat SERIAL
hned za school_id
sloupec v naší tabulce učitelů.
school_id SERIAL
V MySQL
, použijete AUTO_INCREMENT
místo SERIAL
. V tomto příkladu INT
používá se datový typ, který představuje celé číslo.
school_id INT AUTO_INCREMENT
Pokud bychom přidali pět řádků do naší tabulky učitelů, výstup by ukazoval čísla 1, 2, 3, 4, 5 pro school_id
sloupec, protože celé číslo se automaticky zvýší o jednu pro každý nový řádek.
Co je to VARCHAR
datový typ?
A VARCHAR
datový typ je proměnná délka řetězce, kde můžete nastavit maximální délku znaků.
Toto je příklad použití VARCHAR
datový typ pro name
a email
sloupce v naší tabulce učitelů. Číslo 30 je maximální délka znaku.
name VARCHAR(30) column_constraint,
email VARCHAR(30) column_constraint,
Omezení sloupců v SQL
Toto jsou pravidla, která se aplikují na data uvnitř sloupců tabulky.
Zde je seznam některých nejběžnějších omezení sloupců:
- PRIMÁRNÍ KLÍČ – tento klíč slouží jako jedinečný identifikátor tabulky
- CIZI KLÍČ – tento klíč zajišťuje, že hodnoty ve sloupci jsou přítomny také v jiné tabulce. Slouží jako propojení mezi tabulkami.
- UNIQUE – všechny hodnoty ve sloupci musí být jedinečné
- NOT NULL – hodnoty nemohou být NULL. NULL je nepřítomnost hodnoty
- CHECK – testuje hodnotu proti booleovskému výrazu
Příklady PRIMARY
a FOREIGN
klíče
V naší tabulce učitelů můžeme přidat PRIMARY KEY
na school_id
sloupec.
Takto by kód vypadal v PostgreSQL:
school_id SERIAL PRIMARY KEY
Takto by kód vypadal v MySQL:
school_id INT AUTO_INCREMENT PRIMARY KEY
Pokud chcete mít pro PRIMARY KEY
více než jeden sloupec , pak byste jej přidali hned po vytvoření sloupců.
CREATE TABLE table_name(
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
PRIMARY KEY (column1, column2)
);
Pokud chcete propojit jednu tabulku s druhou, můžete použít FOREIGN KEY
.
Řekněme, že máme tabulku nazvanou district_employees s primárním klíčem district_id
. Zde je návod, jak by kód vypadal v PostgreSQL:
CREATE TABLE district_employees(
district_id SERIAL PRIMARY KEY,
employee_name VARCHAR(30) NOT NULL,
PRIMARY KEY(district_id)
);
V naší tabulce učitelů můžeme použít cizí klíč a odkazovat na tabulku district_employees.
district_id INT REFERENCES district_employees(district_id),
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
district_id INT REFERENCES district_employees(district_id),
column1 data_type column_constraint,
column2 data_type column_constraint,
column3 data_type column_constraint,
column4 data_type column_constraint,
... etc
);
Příklady NOT NULL
, CHECK
a UNIQUE
Pokud se chceme ujistit, že nemáme žádné hodnoty, které jsou null, můžeme použít NOT NULL
omezení.
name VARCHAR(30) NOT NULL
Můžeme použít CHECK
omezení, abychom zajistili, že všichni naši učitelé jsou starší 18 let. CHECK
omezení testuje hodnotu proti booleovskému výrazu.
age INT CHECK(age >= 18)
Pokud některá z našich hodnot tuto podmínku nesplňuje, zobrazí se nám chybová zpráva.
Můžeme použít UNIQUE
omezení, abyste se ujistili, že všechny e-maily jsou jedinečné.
email VARCHAR(30) UNIQUE
Toto je konečný výsledek pro tabulku učitelů:
Takto by kód vypadal v PostgreSQL:
CREATE TABLE teachers(
school_id SERIAL PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Takto by kód vypadal v MySQL:
CREATE TABLE teachers(
school_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
email VARCHAR(30) UNIQUE,
age INT CHECK(age >= 18)
);
Doufám, že se vám tento článek líbil a přeji vám hodně štěstí na vaší cestě SQL.