Мне любопытно ... Что плохого в том, чтобы позволить альтеру сбоить при ошибке, если столбец уже существует?
Дерек Дауни
На самом деле мне нужно предоставить .sql файл для моего клиента, который будет иметь все запросы, связанные с изменениями структуры БД. Я не могу отправить всю базу данных им. Я просто хочу отправить им изменения в БД. в этом файле sql еще много запросов. Если этот запрос о создании столбцов потерпел неудачу, то все запросы не будут выполнены. Вот почему я хочу использовать условие if для создания столбца.
zzzzz
Если ваша база данных поддерживает это, вы можете использовать триггер. ДО ВСТАВКИ.
Кибернард
Ответы:
8
MySQL ALTER TABLEне имеет IF EXISTSспецификации.
Вы можете сделать следующее, используя хранимый процесс или язык программирования, если это то, что вам нужно делать на регулярной основе:
псевдокод:
Найдите, существует ли столбец, используя SQL ниже:
ВЫБРАТЬ column_name
ИЗ INFORMATION_SCHEMA. COLUMNS
ГДЕ TABLE_SCHEMA= [Имя базы данных] И TABLE_NAME= [Имя таблицы];
Если приведенный выше запрос возвращает результат, это означает, что столбец существует, в противном случае вы можете продолжить и создать столбец.
В MySQL / MariaDB я получаю ошибку, используя этот запрос, утверждая, что column_nameне существует. Я переформулировал вопрос:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Иисус Алонсо Абад
2
Для простого ответа 0 или 1 на MySQL и (я думаю) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo
14
На самом деле существует сейчас для Марии DB 10.219
ALTERTABLE test ADDCOLUMNIFNOTEXISTS column_a VARCHAR(255);
Бонус, это работает и для MODIFY
ALTERTABLE test MODIFY IFEXISTS column_a VARCHAR(255);
Ответы:
MySQL
ALTER TABLE
не имеетIF EXISTS
спецификации.Вы можете сделать следующее, используя хранимый процесс или язык программирования, если это то, что вам нужно делать на регулярной основе:
псевдокод:
Найдите, существует ли столбец, используя SQL ниже:
ВЫБРАТЬ
column_name
ИЗINFORMATION_SCHEMA
.COLUMNS
ГДЕTABLE_SCHEMA
= [Имя базы данных] ИTABLE_NAME
= [Имя таблицы];Если приведенный выше запрос возвращает результат, это означает, что столбец существует, в противном случае вы можете продолжить и создать столбец.
источник
column_name
не существует. Я переформулировал вопрос:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
На самом деле существует сейчас для Марии DB 10.219
Бонус, это работает и для MODIFY
источник
Вы можете использовать это решение, уже упомянутое в другой публикации StackOverFlow: (ссылка: https://stackoverflow.com/a/31989541/ )
MySQL - ALTER TABLE, чтобы добавить столбец, если он не существует:
источник
Это ниже работало для меня:
источник