Poslední úpravy - Vyhledat:

SQL

O modelování

Power Designer

Oracle Data Modeler

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, 15:59