如何避免MySQL的alter table add column上重复的列名?

时间:2019-03-18 19:00:37

标签: mysql

我的旧CMS需要维护。现在这是一个(错误的)解决方案,但是有删除风险,因此我想修复控制台日志中的错误消息。实际上,错误仅显示在error.log中,并且仅对我来说是令人讨厌的……但也许这是一个简单的陈述。

所以我有一个menu表并运行以下MySQL命令:

ALTER IGNORE TABLE `menu` ADD COLUMN `group_id` BIGINT not null default '1';

每次我登录CMS时都会运行一次。但关键是,我在error.log文件中收到了此错误消息:

DBD::mysql::db do failed: Duplicate column name 'group_id' at /var/www/...

更奇怪的是,我使用IGNORE关键字来避免出现此消息,但仍然收到错误消息。 (无论如何,一切正常,但是我的error.log有很多这样的消息。)

我可以避免此消息吗?也许我可以以某种方式测试该字段在表上是否存在?

删除运行的SQL命令不是一个选择。

1 个答案:

答案 0 :(得分:1)

我了解您可能有不同的DDL。如果是这种情况,我建议您有用于版本控制的表。通过使用此表,您每次拥有新的DDL / DML脚本时都可以拥有唯一的版本号。然后,您可以检查版本表中是否存在该版本号,如果不存在,则可以执行DDL脚本,然后需要在版本表中插入版本号。

BEGIN
  DECLARE @version_number VARCHAR(30) DEFAULT 'V10298492';
  DECLARE @VERSION_EXISTS INT ;

  SELECT COUNT(*) 
    INTO @VERSION_EXISTS 
  FROM CMS_VERSION 
  WHERE VERSION_NUMBER = @version_number;

  IF (@VERSION_EXISTS = 0)
     RETURN;
  END IF;

  --DDL SCRIPT AFTER THIS POINT
  ...
  --END OF DDL SCRIPT

  INSERT INTO CMS_VERSION (VERSION_NUMBER) 
    VALUES (@version_number);
END;