Autor Zpráva
H13
Profil
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
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
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
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
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;

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: