Mysql
 sql >> база данни >  >> RDS >> Mysql

добавете колона към таблицата на mysql, ако тя не съществува

Ето работещо решение (току-що изпробвано с MySQL 5.0 на Solaris):

DELIMITER $$

DROP PROCEDURE IF EXISTS upgrade_database_1_0_to_2_0 $$
CREATE PROCEDURE upgrade_database_1_0_to_2_0()
BEGIN

-- rename a table safely
IF NOT EXISTS( (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE()
        AND TABLE_NAME='my_old_table_name') ) THEN
    RENAME TABLE 
        my_old_table_name TO my_new_table_name,
END IF;

-- add a column safely
IF NOT EXISTS( (SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE()
        AND COLUMN_NAME='my_additional_column' AND TABLE_NAME='my_table_name') ) THEN
    ALTER TABLE my_table_name ADD my_additional_column varchar(2048) NOT NULL DEFAULT '';
END IF;

END $$

CALL upgrade_database_1_0_to_2_0() $$

DELIMITER ;

На пръв поглед вероятно изглежда по-сложно, отколкото би трябвало, но тук трябва да се справим със следните проблеми:

  • IF операторите работят само в съхранени процедури, а не когато се изпълняват директно, напр. в mysql клиент
  • по-елегантен и сбит SHOW COLUMNS не работи в съхранена процедура, така че трябва да използвате INFORMATION_SCHEMA
  • Синтаксисът за изрази за разделяне е странен в MySQL, така че сте дефинирали отново разделителя, за да можете да създавате съхранени процедури. Не забравяйте да превключите обратно разделителя!
  • INFORMATION_SCHEMA е глобална за всички бази данни, не забравяйте да филтрирате в TABLE_SCHEMA=DATABASE() . DATABASE() връща името на текущо избраната база данни.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:@променлива срещу променлива. Каква е разликата?

  2. Как да използвам MySQLdb с Python и Django в OSX 10.6?

  3. Как да се свържете с MySQL или MariaDB база данни

  4. Експортиране на MySQL в изходящ файл:CSV екраниращи знаци

  5. onbeforeprint() и onafterprint() еквивалентни за браузъри извън IE