sql >> Databáze >  >> RDS >> Database

SQL CREATE TABLE pro začátečníky

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 stolu
  • Column1 , atd. jsou názvy, které dáváte svým sloupcům
  • datatype 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 nazvat petid , PETID , nebo pet_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 obsahovat NULL hodnoty).
  • NULL znamená, že sloupec může obsahovat NULL 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 na PetTypes.PetTypeId (jakákoli hodnota, která jde do Pets.PetTypeId sloupec musí mít odpovídající hodnotu v PetTypes.PetTypeId sloupec).
  • Pets.OwnerId sloupec odkazuje na Owners.OwnerId (jakákoli hodnota, která jde do Pets.OwnerId sloupec musí mít odpovídající hodnotu v Owners.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í.


  1. Vkládání dat SQL Server pomocí Oracle® SQL*Loader

  2. zobrazení více záznamů pomocí sady výsledků

  3. Připojení odmítnuto (PGError) (postgresql a rails)

  4. Instalace SQL Express