sql >> Databáze >  >> RDS >> Mysql

Jak vytvořit tabulku v SQL – Příklad dotazu Postgres a MySQL

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 :

  1. Číselné (int, float, sériové, desítkové atd.)
  2. Data a čas (časové razítko, data, čas atd.)
  3. Znak a řetězec (znak, varchar, text atd.)
  4. Unicode (ntext, nvarchar atd.)
  5. Binární (binární atd.)
  6. 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.



  1. Vypněte varování v sqlalchemy

  2. Použití MySql s Entity Framework 4 a Code-First Development CTP

  3. Vytvořte si úžasné seznamy sami nebo GitHub jako notebook

  4. RDBMS vs NoSQL