Poslední úpravy - Vyhledat:

SQL

O modelování

Power Designer

Oracle Data Modeler

Krátká videa DM

Zdroje...

edit SideBar

SQL /

ALTER TABLE

< CREATE TABLE | SQL postupnì | CREATE VIEW >

Tímto pøíkazem upravujeme definici struktury tabulky, a nebo pøidáváme èi ru¹íme omezení. Je mo¾no pøidávat sloupce, mìnit jejich typ nebo velikost, eventuelnì ru¹it sloupce. Pøi tomto je tøeba mít na mysli, ¾e pokud provádíme zmìny struktury tabulek, které jsou ji¾ pou¾ívány nìjakými aplikacemi, mù¾e dojít k zásadním problémùm (viz i Principy datového modelování). Také samotné provedení tìchto zmìn v databázovém systému nemusí být jednoduchá zále¾itost, do hry vstupuje management úlo¾ných kapacit. Tak¾e zmìny struktury tabulky ani nebudeme ukazovat (ètenáøe odká¾eme eventuelnì na referenèní pøírùèku jazyka), a zamìøíme se na definice integritních omezení.

Syntaxe definice omezení:

 
       alter table <jméno_tabulky> add constraint <jméno_omezení> <definice_omezení>;

Zru¹ení omezení:

 
       alter table <jméno_tabulky> drop constraint <jméno_omezení>;

Zmìnu omezení lze dìlat jen tak, ¾e ho zru¹íme a definujeme nové.


Pøíklad: Definujte referenèní integritu mezi tabulkami OSOBA a KOMUNIKAT, tak aby cizí klíè ID_OS v tabulkce KOMUNIKÁT odkazoval na primární klíè tabulky ID tabulky OSOBA. Nastavte kaskádovou variantu pro DELETE.

        alter table KOMUNIKAT
        add constraint FK_KOMUNIKAT_OSOBA
        foreign key (ID_OS) references OSOBA(ID) on delete cascade;

Pøíklad: Zmìòte konrolu záznamù o komunikaci tak, aby obsah mohl být prázdný, ale obsah nebo odkaz byl v¾dy vyplnìn.

        alter table KOMUNIKAT
        drop constraint OBSAH_NOT_NULL;
Kdybychom neznali jméno omezení, nemohli bychom ho zru¹it.
        alter table KOMUNIKAT
        add constraint KOMUNIKAT_O_CEM
        check ((OBSAH is not null) or (ODKAZ is not null));

Uka¾me si je¹tì, jak bychom napravili jednu chybu na¹eho databázového návrhu, a to tu týkající se telefonù. Aby jedna osoba mohla mít i více telefonù, pøidáme tabulku TELEFON, pøesuneme do ní telefony, a zru¹íme sloupce TEL1 a TEL2.

Pøíklad: Vytvoøíme tabulku TELEFON a pøesunme do ní telefony.

        create table TELEFON (
        ID_OS INT not null,
        TEL VARCHAR2(13) not null,
        constraint FK_TELEF foreign key (ID_OS) references OSOBA(ID) 
        on delete cascade,
        constraint PK_TELEF primary key (ID_OS,TEL));

        insert into TELEFON select ID ,TEL1 from OSOBA;
        insert into TELEFON select ID ,TEL2 from OSOBA;
Pokud u nìjaké osoby byly uvedeny dva stejné telefony, nastane pøi vykonávání tohoto pøíkazu chyba. Je dobré se je¹tì pøesvìdèit, ¾e v¹echny telefony byly úspì¹nì pøesunuty.
        select ID,TEL1
        from OSOBA left join TELEFON on (ID=ID_OS and TEL1=TEL)
        where ID_OS is null
        union
        select ID,TEL2
        from OSOBA left join TELEFON on (ID=ID_OS and TEL2=TEL)
        where ID_OS is null;
Pokud jsme dostali prázdný výsledek, mù¾eme zru¹it staré telefony.
        alter table OSOBA drop column TEL1;
        alter table OSOBA drop column TEL2;

< CREATE TABLE | SQL postupnì | CREATE VIEW >

Upravit - Historie - Tisk - Poslední úpravy - Vyhledat
Poslední úprava stránky: 19.05.2011, 13:59