Difference between revisions of "Tvorba tabulky"

From Wikivyuka
Jump to: navigation, search
m
 
m (Uložení dat do tabulky)
 
(23 intermediate revisions by the same user not shown)
Line 1: Line 1:
Tímto příkazem založíme v databázi novou tabulku. Musíme ji pojmenovat, pojmenovat její sloupce a určit datové typy pro tyto sloupce. Seznam konkrétních možných datových typů naleznete v referenční přírůčce jazyka. Základní syntaxe:
+
=====Nová tabulka=====
 +
K založení nové tabulky v databázi slouží příkaz CREATE TABLE.
 +
Obsahuje několik povinných údajů. Tabulku musíme pojmenovat, pojmenovat její sloupce a určit datové typy pro tyto sloupce. Seznam konkrétních možných datových typů naleznete v referenční příručce jazyka SQL pro konkrétní SŘBD. Pro Oracle jsou DT uvedeny [http://docs.oracle.com/cd/B10501_01/server.920/a96540/sql_elements2a.htm v dokumentaci Oracle]. Dále je možné ke každému sloupci uvést různá omezení - ''default hodnotu'', možnost hodnoty ''NULL'' či referenci na jinou tabulku (cizí klíč).  
 +
Syntaxe příkazu:
  
 
+
CREATE TABLE [nazev_databaze.]nazev_tabulky
      create table <jméno_tabulky> (<jméno_sloupce> <datový_typ>[,<jméno_sloupce> <datový_typ> ...]);
+
        (<nazev sloupce> <datovy typ>
 +
        [DEFAULT <konstantni vyraz>]
 +
        [NULL | NOT NULL]
 +
        [<omezeni pro sloupec>]
 +
        |[<omezeni pro tabulku>]
 +
        [,...n]
 +
    );
 +
V [] jsou uvedeny nepovinné údaje - například [nazev_databaze.]. Za () je uvedena povinná část <nazev sloupce> <datovy typ> s možným opakováním až n-krát [,...n].
 +
 
 +
Typy omezení, která při tvorbě tabulky používáme:
 +
 
 +
PRIMARY KEY - definujeme primární klíč tabulky
 +
UNIQUE - definujeme unikátní klíč
 +
NOT NULL - definujeme požadavek, kdy se ve sloupci nesmí zadat prázdná hodnota
 +
DEFAULT <výraz> - definujeme defaultní hodnotu/y pro sloupec (při vkládání nových záznamů SŘBD automaticky hodnotu vloží)
 +
CHECK (<podmínky>) - definujeme podmínky, kterými jsou omezujeme přípustné hodnoty či kombinace hodnot ve sloupcích jednoho záznamu
 +
 
 +
V případě, že omezení nejsou definována při tvorbě tabulky, je možné příkazem ALTER TABLE omezení přidat či změnit.
 +
 
 +
Další nepovinnou částí definice je pojmenování pomocí klauzule CONSTRAINT:
 +
  CONSTRAINT <nazev_omezeni> <definice omezeni>
 +
 
 +
Příklad na vytvoření tabulky ''osoba'':
 +
 
 +
CREATE TABLE osoba (
 +
  id_osoba  NUMBER(7) NOT NULL,
 +
  rod_cis    VARCHAR2(11) NOT NULL UNIQUE,
 +
  jmeno      VARCHAR2(25) NOT NULL,
 +
  prijmeni  VARCHAR2(30) NOT NULL,
 +
  dat_naroz  DATE,
 +
  telefon    VARCHAR2(50),
 +
  plat      NUMBER(6) CHECK (plat < 100000 AND plat > 6200 ),
 +
  id_oddeleni NUMBER(5) NOT NULL,
 +
  CONSTRAINT pk_oso PRIMARY KEY (id_osoba)
 +
  );
 +
 
 +
Až v případě již vytvořené primární tabulky Oddělení je možné v příkazu CREATE TABLE osoba použít i vytvoření cizího klíče
 +
CONSTRAINT fk_odd FOREIGN KEY (id_oddeleni) REFERENCES oddeleni (id_oddeleni)
 +
  ON UPDATE CASCADE
 +
  ON DELETE CASCADE
 +
 
 +
=====Uložení dat do tabulky=====
 +
 
 +
Pro ukládání dat do tabulky se používá příkaz INSERT. Jeho syntaxe má následující tvar
 +
 
 +
INSERT INTO nazev_tabulky
 +
VALUES (hodnota1,hodnota2,hodnota3,...);
 +
 
 +
V případě, že nechceme ukládat data do všech sloupců, nebo máme jiné pořadí hodnot, než je definováno ve struktuře tabulky, je možné vypsat pořadí sloupců, kam data budou ukládána:
 +
 
 +
INSERT INTO nazev_tabulky (sloupec1, sloupec2, ... )
 +
VALUES ((hodnota1,hodnota2,...);
 +
 
 +
Zkuste do tabulky OSOBA uložit několik záznamů:
 +
 
 +
INSERT INTO osoba VALUES (1, '8903036078', 'Václav', 'Frohlich', to_date('1989-03-03','yyyy-mm-dd'), '420777555333', 8000, 80);
 +
INSERT INTO osoba VALUES (2, '9103036078', 'Václav', 'Kajgr', to_date('1991-03-03','yyyy-mm-dd'), '420777555222', 8000, 10);
 +
INSERT INTO osoba VALUES (3, '9102156078', 'Vojtěch', 'Zlý', to_date('1991-02-15','yyyy-mm-dd'), '420777555111', 8000, 10);
 +
INSERT INTO osoba VALUES (4, '9205489465', 'Petr', 'Sugar', to_date('1992-02-15','yyyy-mm-dd'), '420777454551', 8000, 10);
 +
INSERT INTO osoba VALUES (5, '9109126565', 'Adam', 'Schreier', to_date('1991-09-12','yyyy-mm-dd'), '420724085060', 18000, 90);
 +
INSERT INTO osoba VALUES (6, '9109089265', 'Ján', 'Karas', to_date('1991-09-08','yyyy-mm-dd'), '420777354551', 10000, 80);
 +
 
 +
=====Datové typy=====
 +
 
 +
Kompletní popis datových typů je  možno nalézt [http://docs.oracle.com/cd/B10501_01/server.920/a96540/sql_elements2a.htm v dokumentaci Oracle].
 +
 
 +
=====Změna tabulky=====
 +
 
 +
Změnit strukturu tabulky lze příkazem ALTER TABLE. SQL umožňuje přidávat a rušit sloupce příkazem:
 +
 
 +
ALTER TABLE <nazev_tabulky> ADD/DROP (<nazev sloupce> [<datovy typ>]);  
 +
 
 +
Přidání sloupce do tabulky ''OSOBA'' pak může vypadat takto:
 +
ALTER TABLE osoba ADD (adresa VARCHAR2(50));
 +
a jeho zrušení:
 +
ALTER TABLE osoba DROP (adresa);
 +
 
 +
V případě požadavku pouze na změnu definovaného omezení, použijeme nejprve jeho zrušení:
  
Základní syntaxe může být rozšířena o různá integritní omezení kladená na jednotlivé sloupce nabo jejich kombinaci. Omezení však mohou být definována i příkazem ALTER TABLE, jakož i přidávání nebo změna sloupců, takže v našem příkladu zvolíme určité rozdělení těchto definic.
+
ALTER TABLE <nazev_tabulky> DROP CONSTRAINT <nazev_omezeni>;
Rozšířená syntaxe příkazu CREATE TABLE:
 
  
+
a poté vytvoření nového
      create table <jméno_tabulky> (<jméno_sloupce> <datový_typ> [<omezení_tohoto_sloupce>]
 
                                  [,<jméno_sloupce> <datový_typ> [<omezení_tohoto_sloupce>] ...]
 
                                  [,<další_omezení> [,<další_omezení>...]] );
 
  
Možná omezení nepřesahující rámec tabulky:
+
ALTER TABLE <nazev_tabulky> ADD CONSTRAINT <nazev_omezeni>;
  
    PRIMARY KEY ... definice primárního klíče tabukly
+
=====Zrušení tabulky=====
    UNIQUE ... definice unikátního klíče
 
    NOT NULL ... sloupec nesmí být prázdný
 
    DEFAULT <výraz> ... definice defaultní hodnoty pro sloupec
 
  
    CHECK (<podmínky>) ... určení podmínek, které musí splňovat přípustné hodnoty či kombinace hodnot ve sloupcích jednoho řádku tabulky
+
Pokud potřebujeme zrušit celou tabulku (tj. nejen data, ale i strukturu), je v SQL definován příkaz DROP TABLE.
  
Omezení referenční integrity uvedeme v kapitole ALTER TABLE.
+
DROP TABLE <nazev_tabulky>;
Každé omezení může být pojmenováno klauzulí CONSTRAINT, syntaxe:
 
  
 
+
S tímto příkazem tedy opatrně, neboť použití
      constraint <jméno_omezení> <definice omezení>V příkazu pojmenujeme tabulku (dle významu obashu dat, předchozí analýzy), její sloupce (atributy), ke kterým nadefinujeme datové typy.
 
  
Syntaxe příkazu CREATE TABLE:
+
DROP TABLE osoba;
  
'''CREATE TABLE''' [nazev_databaze.]nazev_tabulky
+
vymaže celou práci, kterou jsme s tabulkou ''osoba'' dosud vykonali.
    (<nazev sloupce> <datovy typ>
 
      [DEFAULT <konstantni vyraz>]
 
      [NULL | NOT NULL]
 
      [<omezeni pro sloupec>]
 
      |[<omezeni pro tabulku>]
 
      [,...n]
 
    )
 
  
V [] jsou uvedeny nepovinné údaje - například [nazev_databaze.]. Za () je uvedena povinná část <nazev sloupce> <datovy typ> s možným opakováním až n-krát [,...n].
+
Pokud by tabulka obsahovala sloupec s cizím klíčem na jinou tabulku, mohla by být porušena referenční integrita dat. Pak si můžeme pomoci restriktivním (implicitně daným) omezením, tak i změnou kaskádního přístupu:
 +
 
 +
ALTER TABLE osoba DROP (id_osoba) CASCADE;
 +
 
 +
=====Vytvoření kopie tabulky=====
 +
 
 +
Pokud potřebujeme vytvořit novou tabulku jako kopii již stávající tabulky (tj. nejen strukturu, ale i data), pak je možné použít příkaz
 +
 
 +
CREATE TABLE nova_tabulka AS (SELECT * FROM stara_tabulka);
 +
 
 +
Přičemž za příkazem SELECT je možno použít různé výběry a tak novou tabulku i změnit.
 +
 
 +
 
 +
[http://gis.vsb.cz/wikivyuka/index.php/Prostorov%C3%A9_datab%C3%A1ze_-_cvi%C4%8Den%C3%AD Hlavní stránka předmětu]

Latest revision as of 06:37, 4 March 2015

Nová tabulka

K založení nové tabulky v databázi slouží příkaz CREATE TABLE. Obsahuje několik povinných údajů. Tabulku musíme pojmenovat, pojmenovat její sloupce a určit datové typy pro tyto sloupce. Seznam konkrétních možných datových typů naleznete v referenční příručce jazyka SQL pro konkrétní SŘBD. Pro Oracle jsou DT uvedeny v dokumentaci Oracle. Dále je možné ke každému sloupci uvést různá omezení - default hodnotu, možnost hodnoty NULL či referenci na jinou tabulku (cizí klíč). Syntaxe příkazu:

CREATE TABLE [nazev_databaze.]nazev_tabulky 
        (<nazev sloupce> <datovy typ> 
        [DEFAULT <konstantni vyraz>]
        [NULL | NOT NULL]
        [<omezeni pro sloupec>]
        |[<omezeni pro tabulku>]
        [,...n]
   );

V [] jsou uvedeny nepovinné údaje - například [nazev_databaze.]. Za () je uvedena povinná část <nazev sloupce> <datovy typ> s možným opakováním až n-krát [,...n].

Typy omezení, která při tvorbě tabulky používáme:

PRIMARY KEY - definujeme primární klíč tabulky
UNIQUE - definujeme unikátní klíč
NOT NULL - definujeme požadavek, kdy se ve sloupci nesmí zadat prázdná hodnota
DEFAULT <výraz> - definujeme defaultní hodnotu/y pro sloupec (při vkládání nových záznamů SŘBD automaticky hodnotu vloží)
CHECK (<podmínky>) - definujeme podmínky, kterými jsou omezujeme přípustné hodnoty či kombinace hodnot ve sloupcích jednoho záznamu 

V případě, že omezení nejsou definována při tvorbě tabulky, je možné příkazem ALTER TABLE omezení přidat či změnit.

Další nepovinnou částí definice je pojmenování pomocí klauzule CONSTRAINT:

 CONSTRAINT <nazev_omezeni> <definice omezeni>

Příklad na vytvoření tabulky osoba:

CREATE TABLE osoba (
 id_osoba   NUMBER(7) NOT NULL,
 rod_cis    VARCHAR2(11) NOT NULL UNIQUE,
 jmeno      VARCHAR2(25) NOT NULL,
 prijmeni   VARCHAR2(30) NOT NULL,
 dat_naroz  DATE,
 telefon    VARCHAR2(50),
 plat       NUMBER(6) CHECK (plat < 100000 AND plat > 6200 ),
 id_oddeleni NUMBER(5) NOT NULL,
 CONSTRAINT pk_oso PRIMARY KEY (id_osoba)
  );

Až v případě již vytvořené primární tabulky Oddělení je možné v příkazu CREATE TABLE osoba použít i vytvoření cizího klíče

CONSTRAINT fk_odd FOREIGN KEY (id_oddeleni) REFERENCES oddeleni (id_oddeleni) 
 ON UPDATE CASCADE
 ON DELETE CASCADE
Uložení dat do tabulky

Pro ukládání dat do tabulky se používá příkaz INSERT. Jeho syntaxe má následující tvar

INSERT INTO nazev_tabulky
VALUES (hodnota1,hodnota2,hodnota3,...);

V případě, že nechceme ukládat data do všech sloupců, nebo máme jiné pořadí hodnot, než je definováno ve struktuře tabulky, je možné vypsat pořadí sloupců, kam data budou ukládána:

INSERT INTO nazev_tabulky (sloupec1, sloupec2, ... )
VALUES ((hodnota1,hodnota2,...);

Zkuste do tabulky OSOBA uložit několik záznamů:

INSERT INTO osoba VALUES (1, '8903036078', 'Václav', 'Frohlich', to_date('1989-03-03','yyyy-mm-dd'), '420777555333', 8000, 80);
INSERT INTO osoba VALUES (2, '9103036078', 'Václav', 'Kajgr', to_date('1991-03-03','yyyy-mm-dd'), '420777555222', 8000, 10);
INSERT INTO osoba VALUES (3, '9102156078', 'Vojtěch', 'Zlý', to_date('1991-02-15','yyyy-mm-dd'), '420777555111', 8000, 10);
INSERT INTO osoba VALUES (4, '9205489465', 'Petr', 'Sugar', to_date('1992-02-15','yyyy-mm-dd'), '420777454551', 8000, 10);
INSERT INTO osoba VALUES (5, '9109126565', 'Adam', 'Schreier', to_date('1991-09-12','yyyy-mm-dd'), '420724085060', 18000, 90);
INSERT INTO osoba VALUES (6, '9109089265', 'Ján', 'Karas', to_date('1991-09-08','yyyy-mm-dd'), '420777354551', 10000, 80);
Datové typy

Kompletní popis datových typů je možno nalézt v dokumentaci Oracle.

Změna tabulky

Změnit strukturu tabulky lze příkazem ALTER TABLE. SQL umožňuje přidávat a rušit sloupce příkazem:

ALTER TABLE <nazev_tabulky> ADD/DROP (<nazev sloupce> [<datovy typ>]); 

Přidání sloupce do tabulky OSOBA pak může vypadat takto:

ALTER TABLE osoba ADD (adresa VARCHAR2(50));

a jeho zrušení:

ALTER TABLE osoba DROP (adresa); 

V případě požadavku pouze na změnu definovaného omezení, použijeme nejprve jeho zrušení:

ALTER TABLE <nazev_tabulky> DROP CONSTRAINT <nazev_omezeni>;

a poté vytvoření nového

ALTER TABLE <nazev_tabulky> ADD CONSTRAINT <nazev_omezeni>;
Zrušení tabulky

Pokud potřebujeme zrušit celou tabulku (tj. nejen data, ale i strukturu), je v SQL definován příkaz DROP TABLE.

DROP TABLE <nazev_tabulky>;

S tímto příkazem tedy opatrně, neboť použití

DROP TABLE osoba;

vymaže celou práci, kterou jsme s tabulkou osoba dosud vykonali.

Pokud by tabulka obsahovala sloupec s cizím klíčem na jinou tabulku, mohla by být porušena referenční integrita dat. Pak si můžeme pomoci restriktivním (implicitně daným) omezením, tak i změnou kaskádního přístupu:

ALTER TABLE osoba DROP (id_osoba) CASCADE;
Vytvoření kopie tabulky

Pokud potřebujeme vytvořit novou tabulku jako kopii již stávající tabulky (tj. nejen strukturu, ale i data), pak je možné použít příkaz

CREATE TABLE nova_tabulka AS (SELECT * FROM stara_tabulka);

Přičemž za příkazem SELECT je možno použít různé výběry a tak novou tabulku i změnit.


Hlavní stránka předmětu