Каков синтаксис для удаления столбца в таблице MySQL, если этот столбец существует в версии 4.0.18?Синтаксис MySQL Alter для удаления столбца, если он существует
ответ
Для MySQL нет:MySQL Feature Request.
Разрешить это, возможно, очень плохая идея, так или иначе: IF EXISTS
указывает, что вы запускаете деструктивные операции с базой данных с неизвестной структурой (для вас). Могут быть ситуации, когда это приемлемо для быстрой и грязной локальной работы, но если у вас возникает соблазн запустить такое заявление против производственных данных (при миграции и т. Д.), Вы играете с огнем.
Но если вы настаиваете, нетрудно просто проверить наличие на первом месте в клиенте или поймать ошибку.
MariaDB также поддерживает следующие начиная с 10.0.2:
DROP [COLUMN] [IF EXISTS] col_name
я. е.
ALTER TABLE my_table DROP IF EXISTS my_column;
Но, возможно, это плохая идея полагаться на нестандартную функцию, поддерживаемую только одной из нескольких вилок MySQL.
В MySQL нет поддержки на уровне языка. Ниже приведен пример работы с метаданными MySQL information_schema в версии 5.0+, но он не будет устранять проблему в 4.0.18.
drop procedure if exists schema_change;
delimiter ';;'
create procedure schema_change() begin
/* delete columns if they exist */
if exists (select * from information_schema.columns where table_schema = schema() and table_name = 'table1' and column_name = 'column1') then
alter table table1 drop column `column1`;
end if;
if exists (select * from information_schema.columns where table_schema = schema() and table_name = 'table1' and column_name = 'column2') then
alter table table1 drop column `column2`;
end if;
/* add columns */
alter table table1 add column `column1` varchar(255) NULL;
alter table table1 add column `column2` varchar(255) NULL;
end;;
delimiter ';'
call schema_change();
drop procedure if exists schema_change;
Я написал несколько более подробную информацию в blog post.
ответ работает Чейз Зайберт, но я хотел бы добавить, что если у вас есть несколько схем вы хотите изменить ВЫБРАТЬ таким образом:
select * from information_schema.columns where table_schema in (select schema()) and table_name=...
Я понимаю, что эта нить довольно стар, но у меня был тот же проблема. Это было мое самое основное решение с помощью MySQL Workbench, но оно отлично работало ...
- получить новый редактор SQL и выполнить SHOW TABLES, чтобы получить список таблиц
- выбрать все строки, и выберите копирование в буфер обмена (без кавычек) из контекстного меню
- вставить список имена в другую вкладку редактора
- Напишите ваш запрос, например ALTER TABLE
x
DROPa
; - сделать некоторые копирования и вставки, так что вы в конечном итоге с отдельного запроса для каждой таблицы
- Тумблер следует ли верстак остановки при возникновении ошибки
- Хит выполнить и посмотреть журнал вывода
любой таблицы, которые имели таблицу теперь не никаких таблиц, которые не будут показаны ошибки в журналах
, то вы можете найти/заменить «падение a
» изменить на «ADD COLUMN b
INT NULL» и т.д. d снова запустите все это ...
Немного неудобно, но, наконец, вы получите конечный результат, и вы можете контролировать/контролировать весь процесс и не забывать сохранять ваши SQL-скрипты на случай, если они вам понадобятся.
Я знаю, что это старый поток, но есть простой способ справиться с этим требованием без использования хранимых процедур. Это может помочь кому-то.
set @exist_Check := (
select count(*) from information_schema.columns
where TABLE_NAME='YOUR_TABLE'
and COLUMN_NAME='YOUR_COLUMN'
and TABLE_SCHEMA=database()
) ;
set @sqlstmt := if(@exist_Check>0,'alter table YOUR_TABLE drop column YOUR_COLUMN', 'select ''''') ;
prepare stmt from @sqlstmt ;
execute stmt ;
Надеюсь, это поможет кому-то, как и мне (после большого количества проб и ошибок).
- 1. Запретить выбор столбца, если он не существует
- 2. Alter таблицы добавить синтаксис столбца в SQL
- 3. Alter Тип: добавить атрибут, если он еще не существует
- 4. SQL синтаксис, если существует
- 5. Как выглядит синтаксис Alter Table для добавления столбца DATETIME?
- 6. сценарий оболочки для удаления файла, если он уже существует
- 7. MySQL хранимые процедуры, если проверка таблица существует, то Alter Синтаксис ошибки
- 8. MySQL Создать триггер, если он не существует?
- 9. MySql - Alter Table и добавить столбец, если не существует
- 10. MySQL select column, если он существует
- 11. Отключить внешний ключ, только если он существует
- 12. Создайте или измените триггер, если он существует
- 13. Попытка лучше понять синтаксис MySQL ALTER
- 14. MySQL: Как добавить столбец, если он еще не существует?
- 15. Пакетный синтаксис для цикла Если существует
- 16. Alter Table, если столбец не существует
- 17. Alter MySQL кодировка столбца, каскад к FKs
- 18. Regex для удаления конкретной строки, если существует
- 19. Какой правильный синтаксис для MySQL alter table query?
- 20. Mysql: Отбросьте уникальный ключ, если он существует, но не зная имя ключа или он существует
- 21. Добавить индекс в таблицу, если он не существует
- 22. Ошибка столбца столбца Alter Table - доступ VBA
- 23. Как я могу получить значение столбца, если он существует?
- 24. Render image, если он существует
- 25. MySQL ALTER/UPDATE table
- 26. MySQl ЕСЛИ НЕ СУЩЕСТВУЕТ, СОЗДАТЬ Хранимую процедуру
- 27. createUserDefinedFunction: если он уже существует?
- 28. Отбросьте вид DB2, если он существует
- 29. Синтаксис для запроса MySQL, используя псевдоним для столбца
- 30. Ограничение столбца Netezza alter
Есть ли способ сделать это в чистом SQL? – Tom 2010-01-19 08:56:08
Ничего себе. Упоминается в 2005 году - 9 лет назад. Я предполагаю, что это список приоритетов ... – crmpicco 2014-07-15 16:47:34
MariaDB поддерживает его начиная с 10.0.2 – Dfr 2014-11-25 09:02:20