MySQL:如果不存在,如何创建列?

zzz*_*zzz 21 mysql mysql-5.5 mysql-5.1 mysql-5.6

只有当它不存在时,我才尝试为我的表创建一个列。我已经研究了很多,但我还没有找到任何解决方案。

这真的可以有条件地创建 Column 吗?

Par*_*key 19

现在实际存在于 Maria DB 10.219

ALTER TABLE test ADD COLUMN IF NOT EXISTS column_a VARCHAR(255);
Run Code Online (Sandbox Code Playgroud)

奖励,它也适用于修改

ALTER TABLE test MODIFY IF EXISTS column_a VARCHAR(255);
Run Code Online (Sandbox Code Playgroud)


小智 13

MySQLALTER TABLE没有IF EXISTS规范。

如果这是您需要定期执行的操作,您可以通过使用存储过程或编程语言来执行以下操作:

伪代码:

  • 使用下面的 SQL 查找列是否存在:

    column_name 从 中选择INFORMATION_SCHEMACOLUMNS WHERE TABLE_SCHEMA=[数据库名称] AND TABLE_NAME=[表名称];

  • 如果上述查询返回结果,则表示该列存在,否则您可以继续创建该列。

  • 对于 MySQL 和(我认为)MariaDB 的简单 0 或 1 答案:`SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name] '` (3认同)

小智 8

您可以使用此解决方案,已在另一篇 StackOverFlow 帖子中提到:(参考:https : //stackoverflow.com/a/31989541/

MySQL - ALTER TABLE 添加不存在的列:

SET @dbname = DATABASE();
SET @tablename = "tableName";
SET @columnname = "colName";
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (table_name = @tablename)
      AND (table_schema = @dbname)
      AND (column_name = @columnname)
  ) > 0,
  "SELECT 1",
  CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " INT(11);")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;
Run Code Online (Sandbox Code Playgroud)