Difference between revisions of "Tvorba tabulky"
m |
m (→Uložení dat do tabulky) |
||
(23 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | + | =====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 | |
− | + | (<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í: | ||
− | + | 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. | ||
+ | |||
+ | |||
+ | [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
Contents
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.