Ответ 1
База данных 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;
Дополнительная информация:
- Справочное руководство MySQL: Глава 19. Таблицы INFORMATION_SCHEMA
- Справочное руководство MySQL: Таблица ТАБЛИЦЫ ИНФОРМАЦИИ_SCHEMA
- Справочное руководство MySQL: Таблица COLUMNS INFORMATION_SCHEMA
UPDATE:
Другим вариантом, возможно, проще - удалить существующую таблицу и снова создать ее с помощью новой схемы. Для этого вам необходимо:
- Создать временную таблицу, точную копию существующей таблицы
- Заполните временную таблицу данными из старой таблицы
- Удалить старую таблицу
- Создать новую таблицу с новой схемой
- Заполните новую таблицу информацией из временной таблицы
- Удалить временную таблицу.
Итак, в 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".
Дополнительная информация:
- Справочное руководство MySQL: Синтаксис CREATE TABLE
- Справочное руководство MySQL: Синтаксис INSERT
- Справочное руководство MySQL: Синтаксис INSERT... SELECT