Databázy (1) Prednáška 11 Alexander Šimko simko@fmph.uniba.sk
Contents I Aktualizovanie štruktúry databázy
Section 1 Aktualizovanie štruktúry databázy
Aktualizácia štruktúry databázy Štruktúra databázy sa vyvíja
Aktualizácia štruktúry databázy Čo s produkciou?
Aktualizácia štruktúry databázy ALTER TABLE
Premenovanie tabuľky ALTER TABLE názov_tabuľky RENAME TO nový_názov
Pridanie nového stĺpca ALTER TABLE názov_tabuľky ADD [COLUMN] definícia_stĺpca definícia_stĺpca ako pri CREATE TABLE
Pridanie nového stĺpca Čo existujúce riadky? DEFAULT hodnota NULL
Pridanie nového stĺpca Integritné obmedzenia Pozor!!! Existujúce riadky nemusia spĺňať integritné obmedzenia!
Pridanie nového stĺpca Integritné obmedzenia ALTER TABLE films ADD COLUMN length integer NOT NULL Ak tabuľka neobsahuje riadky, potom všetko zbehne Ak tabuľka obsahuje nejaké riadky, potom dostaneme chybu ERROR: column "length" contains null values
Zmazanie existujúceho stĺpca ALTER TABLE názov_tabuľky DROP [COLUMN] názov_stĺpca [CASCADE] CASCASE zmaže aj odkazujúce sa objekty
Premenovanie existujúceho stĺpca ALTER TABLE názov_tabuľky RENAME [COLUMN] názov_stĺpca TO nový_názov
Nastavenie novej DEFAULT hodnoty ALTER TABLE názov_tabuľky ALTER [COLUMN] názov_stĺpca SET DEFAULT výraz neberie ohľad na predchádzajúcu DEFAULT hodnotu
Zrušenie DEFAULT hodnoty ALTER TABLE názov_tabuľky ALTER [COLUMN] názov_stĺpca DROP DEFAULT
Zmena dátového typu stĺpca ALTER TABLE názov_tabuľky ALTER [COLUMN] názov_stĺpca [SET DATA] TYPE názov_typu
Zmena dátového typu stĺpca Čo s dátami?
Zmena dátového typu stĺpca Automatická konverzia dát integer varchar varchar(2) varchar(255)......
Zmena dátového typu stĺpca Konvertuje sa aj DEFAULT hodnota
Zmena dátového typu stĺpca vals key : varchar value : varchar length 20 height 67 ALTER TABLE vals ALTER COLUMN value SET DATA TYPE integer ERROR: column "value" cannot be cast automatically to type integer
Zmena dátového typu stĺpca ALTER TABLE názov_tabuľky ALTER [COLUMN] názov_stĺpca [SET DATA] TYPE názov_typu [USING nová_hodnota]
Zmena dátového typu stĺpca vals key : varchar value : varchar length 20 height 67 ALTER TABLE vals ALTER COLUMN value SET DATA TYPE integer USING value::integer vals key : varchar value : integer length 20 height 67
Zmena dátového typu stĺpca users id : serial name : varchar 1 johny 2 oz ALTER TABLE users ALTER COLUMN name SET DATA TYPE varchar(2) ERROR: value too long for type character varying(2)
Zmena dátového typu stĺpca users id : serial name : varchar 1 johny 2 oz ALTER TABLE users ALTER COLUMN name SET DATA TYPE varchar(2) USING left(name, 2) users id : serial name : varchar(2) 1 jo 2 oz
Zmena dátového typu stĺpca users id : serial name : varchar tel_number : integer 1 johny 9393344 2 oz 943423 ALTER TABLE users ALTER COLUMN tel_number SET DATA TYPE varchar USING concat( +466, tel_number) users id : serial name : varchar tel_number : varchar 1 johny +4669393344 2 oz +466943423
Zmena dátového typu stĺpca USING sa môže odkazovať aj na iné stĺpce
Zmena dátového typu stĺpca A čo DEFAULT hodnota?
Zmena dátového typu stĺpca Tá sa použitím USING nekonvertuje
Zmena dátového typu stĺpca ALTER TABLE users ALTER COLUMN tel_number DROP DEFAULT; ALTER TABLE users ALTER COLUMN tel_number SET DATA TYPE varchar USING concat( +466, tel_number); ALTER TABLE users ALTER COLUMN tel_number SET DEFAULT +88083582 ;
Pridanie integritného obmedzenia NOT NULL ALTER TABLE názov_tabuľky ALTER [ COLUMN ] názov_stĺpca SET NOT NULL
Pridanie integritného obmedzenia NOT NULL NULL hodnoty v existujúcich riadkoch vedú na chybu integritné obmedzenie sa nevytvorí
Odstránenie integritného obmedzenia NOT NULL ALTER TABLE názov_tabuľky ALTER [ COLUMN ] názov_stĺpca DROP NOT NULL
Pridanie ostatných integritných obmedzení ALTER TABLE názov_tabuľky ADD definícia_integritného_obmedzenia kde definícia_integritného_obmedzenia je [CONSTRAINT názov] UNIQUE (...) [CONSTRAINT názov] CHECK (...) [CONSTRAINT názov] PRIMARY KEY (...) [CONSTRAINT názov] FOREIGN KEY (...) REFERENCES...
Pridanie ostatných integritných obmedzení Ak dáta porušujú integritné obmedzenie, tak nie je pridané
Premenovanie existujúceho integritného obmedzenia ALTER TABLE názov_tabuľky RENAME CONSTRAINT názov_obmedzenia TO nový_názov
Odstránenie existujúceho integritného obmedzenia ALTER TABLE názov_obmedzenia DROP CONSTRAINT názov_obmedzenia
ALTER script postupnosť poväčšine ALTER príkazov, ktoré docielia požadovanú zmenu štruktúry databázy
Komplexný príklad films id : serial name : varchar director : varchar price : numeric chceme zmeniť na films id : serial name : varchar director_id : integer price : numeric persons id : serial name : varchar
Komplexný príklad CREATE TABLE persons ( id serial, name varchar ); INSERT INTO persons (name) SELECT DISTINCT director FROM films;
Komplexný príklad ALTER TABLE films ALTER COLUMN director SET DATA TYPE integer USING (SELECT id FROM persons WHERE name = director);
Komplexný príklad Toto žiaľ neide. USING nepodporuje vnorené SELECTy.
Komplexný príklad ALTER TABLE films ADD COLUMN director_id integer; UPDATE films AS f SET director_id = (SELECT p.id FROM persons AS p WHERE p.name = f.director);
Komplexný príklad ALTER TABLE films DROP COLUMN director;
Koniec Koniec