Portál AbcLinuxu, 11. prosinec 2017 20:17

Dotaz: Jak přidat sloupec do tabulky pokud neexistuje ?

11.11.2016 12:11 Uranusak
Jak přidat sloupec do tabulky pokud neexistuje ?
Přečteno: 1527×
Odpovědět | Admin
Potřebuji přidat sloupec do tabulky pokud neexistuje, zkoušel jsem několik variant, ale ani jedna mi nefunguje. Např:
IF NOT EXISTS
    (SELECT * FROM `information_schema`.`COLUMNS` WHERE `TABLE_SCHEMA` = 'databaze' AND `TABLE_NAME` = 'tabulka' AND `COLUMN_NAME` = 'pokus' )
THEN
    ALTER TABLE `databaze`.`tabulka` ADD pokus INT(10) NOT NULL DEFAULT '0';
END IF;
Pokud zkusím SELECT nebo ALTER TABLE zvlášť, tak se příkaz provede, ale netuším jak udělat, aby se přidal pouze pokud sloupec neexistuje.

MySQL 5.6.30-1~bpo8+1 - (Debian)

Předem děkuji za rady.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

11.11.2016 14:27 MilanC | skóre: 10
Rozbalit Rozbalit vše Re: Jak přidat sloupec do tabulky pokud neexistuje ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
A proč to vůbec řešit? Není lepší volat jen ALTER TABLE...? Pokud chybí tak se přidá, pokud nechybí, nic se nestane. :-)
Josef Kufner avatar 28.12.2016 14:42 Josef Kufner | skóre: 67
Rozbalit Rozbalit vše Re: Jak přidat sloupec do tabulky pokud neexistuje ?
Ale stane. Hodí to chybu.
Hello world ! Segmentation fault (core dumped)
Josef Kufner avatar 28.12.2016 18:06 Josef Kufner | skóre: 67
Rozbalit Rozbalit vše Re: Jak přidat sloupec do tabulky pokud neexistuje ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Toto bys neměl vůbec řešit. Měl bys vědět, v jakém stavu databázi máš.

Pokud jde o aktualizace databáze při aktualizaci aplikace, tak nejlepší řešení je mít sadu SQL skriptů. Pro každou změnu jeden soubor, který na konci vloží záznam do logovací tabulky, že ten soubor byl proveden. Pro aktualizaci pak stačí jen porovnat adresář se skripty s tabulkou obsahující seznam již provedených skriptů a spustit ty dosud neprovedené. Aby to fungovalo je potřeba staré skripty neměnit a spouštět je v definovaném pořadí (např. číslovat datumem v ISO formátu). Např. https://smalldb.org/changelog.sql/.
Hello world ! Segmentation fault (core dumped)
Jesus Jimenez avatar 29.12.2016 02:45 Jesus Jimenez | skóre: 28
Rozbalit Rozbalit vše Re: Jak přidat sloupec do tabulky pokud neexistuje ?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pouzivas to ve fci nebo procedure? Jestli ne, tak to zkus takhle:
use databaze;
select count(*) into @exist from information_schema.columns where table_schema='databaze' and table_name='tabulka' and column_name='pokus';
set @query = IF(@exist <= 0, 'alter table tabulka add column pokus int(10) not null', 'select \'sloupec existuje\' as status');
prepare statement from @query;
execute statement;
Samozrejme to, co pise Kufner je docela rozumny...
Doaenův zákon průtahů: Čím pomaleji pracuješ, tím méně naděláš chyb. -- Murphy

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.