Autor | Zpráva | ||
---|---|---|---|
H13 Profil |
#1 · Zasláno: 23. 8. 2008, 23:30:35
Ahoj potřeboval bych poradit s dvouma dotazama na úrovni sql:
1) vytvoř tabulku pokud již neexistuje: tipuju že bych mohl použít nějakej podobnej dotaz jako: DROP TABLE IF EXISTS `tabulka`; tedy: CREATE TABLE `tabulka`(...) TYPE=MyISAM IF NOT EXISTS; ??? 2) přidej sloupec do tabulky jestli tam už není ... tak tady už vůbec nevím: ALTER TABLE `tabulka` ADD `sloupec` VARCHAR( 100 ) NOT NULL DEFAULT '0' AFTER `sloupec_predtim` IF NOT EXISTS; ??? Samozřejmě oba dotazy s IF NOT EXIST mi neprojdou, takže bych potřeboval poradit co změnit Díky |
||
Alphard Profil |
#2 · Zasláno: 23. 8. 2008, 23:40:42
1) tohle ani nemusíte psát na fórum, odpověd vpodstatě znáte, stačí v manuálu vyhledat create table a druhý odkav vede na Create table syntax, z toho je zřejmé že:
create table if not exists jmeno_tabulky 2) nevím, Alter table syntax je v manuálu také, ale o exists jsem nenašel relevantní zmínku |
||
H13 Profil |
#3 · Zasláno: 24. 8. 2008, 00:16:23 · Upravil/a: H13
1) funguje, trochu jsem to nezvládl s pořadím příkazů
2) no taky tam nic takovýho nevidím, mohl bych normálně vložit příkaz a dostal bych chybu: Duplicate column name ... což by splnilo účel ( sloupec by nebyl přidán), jenže bohužel s chybou :-( ??? Tohle jsem našel jako php řešení, samozřejmě bych to raději řešil na úrovni sql: http://www.edmondscommerce.co.uk/blog/mysql/mysql-add-column-if-not-ex ists-php-function/ 1. function add_column_if_not_exist($db, $column, $column_attr = "VARCHAR( 255 ) NULL" ){ 2. $exists = false; 3. $columns = mysql_query("show columns from $db"); 4. while($c = mysql_fetch_assoc($columns)){ 5. if($c['Field'] == $column){ 6. $exists = true 7. break; 8. } 9. } 10. if(!$exists){ 11. mysql_query("ALTER TABLE `$db` ADD `$column` $column_attr"); 12. } 13. } |
||
Alphard Profil |
#4 · Zasláno: 24. 8. 2008, 00:23:55
„což by splnilo účel ( sloupec by nebyl přidán), jenže bohužel s chybou :-( ???“
taková řešení se mi nelíbí, ale když nejsem schopen poradit lépe... můžete použít @mysql_query ("alter table ..."); if (mysql_errno() == xxx) // místo xxx dejte příslušný kód, teď ho zpaměti nevím, abyste ověřil, že chyba byla skutečně v tomto možná by byl lepší ten váš, záleží, jestli ošetřujete výjimečnou chybu, nebo k tomu bude docházet často |
||
H13 Profil |
#5 · Zasláno: 24. 8. 2008, 00:29:03
Ještě jsem našel toto: (musím se na to podívat, zda bych to mohl vložit do jednodo dotazu z php a zda nebude lepši použít php)
delimiter '//' CREATE PROCEDURE addcol() BEGIN IF NOT EXISTS( SELECT * FROM information_schema.COLUMNS WHERE COLUMN_NAME='new_column' AND TABLE_NAME='the_table' AND TABLE_SCHEMA='the_schema' ) THEN ALTER TABLE `the_schema`.`the_table` ADD COLUMN `new_column` bigint(20) unsigned NOT NULL default 1; END IF; END; // delimiter ';' CALL addcol(); DROP PROCEDURE addcol; |
||
Časová prodleva: 16 let
|
0