2013-05-30 3 views
14

Мне нужно запустить установщик, который также может быть обновлением. Установщик должен иметь возможность получить определенную схему/структуру базы данных mysql, независимо от того, существуют ли некоторые из таблиц, пропустили несколько столбцов или их не нужно менять, поскольку их структура обновлена.Alter table if exists or create if does not

Как я могу сделать изящную комбинацию ALTER и CREATE?

Я думал, там должно быть что-то вроде «ADD ... ЕСЛИ ... Дубликат»

Скажем, у меня есть таблица A. В одном клиенте таблица имеет один столбец -A1, а другой клиент имеет то же самое таблицу, но со столбцом A1 и столбцом A2.

Я хочу, чтобы моя команда sql заставила обе таблицы клиентов удерживать три столбца: A1, A2 и A3.

Снова, мой скрипт - это sql-файл, который я дамлю mysql.

Как это сделать? Спасибо :-)

ответ

1

Ну, если вы используете язык кодирования сделать:

SHOW TABLES LIKE 'myTable' 

, если возвращать значение называют альтер еще называют создание

+0

Я не использую язык кодирования. Я сбрасываю sql-файл. –

+0

Итак, создайте функцию mysql, которая подсчитывает результаты 'SHOW TABLES LIKE 'myTable'', если 0 create else alter? Существует много документации по функциям mysql. – We0

14

MySQL INFORMATION_SCHEMA базы данных на помощь:

-- First check if the table exists 
IF EXISTS(SELECT table_name 
      FROM INFORMATION_SCHEMA.TABLES 
      WHERE table_schema = 'db_name' 
      AND table_name LIKE 'wild') 

-- If exists, retreive columns information from that table 
THEN 
    SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE table_name = 'tbl_name' 
     AND table_schema = 'db_name'; 

    -- do some action, i.e. ALTER TABLE if some columns are missing 
    ALTER TABLE ... 

-- Table does not exist, create a new table 
ELSE 
    CREATE TABLE .... 

END IF; 

Дополнительная информация:

UPDATE:

Другой вариант, возможно, проще, это отбросить существующую таблицу и снова создайте его с помощью новой схемы. Чтобы сделать это, вам нужно:

  1. Создать временную таблицу, точную копию существующей таблицы
  2. заселить временную таблицу с данными из старой таблицы
  3. отброшенных старая таблица
  4. Создать новая таблица с новой схемой
  5. Заполните новую таблицу информацией из временной таблицы
  6. Удалить временную таблицу.

Так, в коде SQL:

CREATE TABLE old_table_copy LIKE old_table; 

INSERT INTO old_table_copy 
SELECT * FROM old_table; 

DROP TABLE old_table; 

CREATE TABLE new_table (...new values...); 

INSERT INTO new_table ([... column names from old table ...]) 
SELECT [...column names from old table ...] 
FROM old_table_copy; 

DROP TABLE old_table_copy; 

На самом деле последний шаг, "Drop временной таблицы.", Вы можете пропустить некоторое время. На всякий случай, вы хотели бы иметь какую-то резервную копию старой таблицы «just-in-case».

Дополнительная информация:

+0

где я запускаю такие скрипты, хотя-Im новичок с функциями mysql. Вы можете запустить его как запрос? –

+0

Я ничего не знаю о вашем «установщике», так как вы не указали какую-либо информацию, но в основном у вас есть два варианта: (1) вы делаете это в одном SQL-запросе, используя «ЗАПОМНУЮ ПРОЦЕДУЮ» или (2) вы используете какой-то другой внешний язык программирования и выполняете условия 'IF' /' ELSE'. – GregD

+0

@ user1432779, см. Мое обновление выше – GregD

Смежные вопросы