MySQL更改语法删除列,如果它存在

如果该列存在于4.0.18版本中,那么在MySQL表中删除列的语法是什么?

对于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中没有语言级别的支持。 这是一个解决scheme,涉及到5.0以上的MySQL information_schema元数据,但是它不会在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; 

我在博客文章中写了一些更详细的信息。

Chase Seibert的答案是有效的,但是我想补充一点,如果你有几个模式你想改变SELECT:

 select * from information_schema.columns where table_schema in (select schema()) and table_name=... 

我知道这是一个旧的线程,但有一个简单的方法来处理这个要求,而不使用存储过程。 这可能有助于某人。

 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 ; 

希望这有助于某人,因为它(我经历了大量的反复试验)。

我意识到这个线程现在是相当老,但我有同样的问题。 这是我使用MySQL Workbench的非常基本的解决scheme,但它工作正常…

  1. 得到一个新的SQL编辑器并执行SHOW TABLES来获取你的表的列表
  2. select所有行,然后从上下文菜单中select复制到剪贴板(未加引号)
  3. 将名称列表粘贴到另一个编辑器选项卡中
  4. 编写你的查询,即ALTER TABLE x DROP a ;
  5. 做一些复制和粘贴,所以你最终为每个表单独的查询
  6. 切换发生错误时是否停止工作台
  7. 点击执行并查看输出日志

现在有任何表的表都没有任何表中没有显示日志中的错误

那么你可以find/replace'drop a '改为'ADD COLUMN b INT NULL'等,然后再运行整个事情….

有点笨重,但最后你会得到最终的结果,你可以控制/监视整个过程,并记得保存你的SQL脚本,以防万一你再次需要它们。