【问题标题】:Add column to MySQL (not MariaDB) table only if it does not exist using SQL only仅在不存在的情况下将列添加到 MySQL(不是 MariaDB)表仅使用 SQL
【发布时间】:2016-09-02 06:34:06
【问题描述】:

我已阅读this question 和解决方案,但它们或多或少不适用于我的情况。我只有 SQL 选项,应该避免使用PROCEDURE,我们可能没有所需的权限。

这是一个创建缺失表、列和索引等的 SQL 脚本(模式更新)

我看到在 MariaDB 中我们可以使用 IF NOT EXISTS 子句,但这在 MySQL 中不可用。 MySQL 中是否有任何类似的方法或解决方法?

【问题讨论】:

    标签: mysql alter-table


    【解决方案1】:

    在 SET 语句中使用 IF() 来提出适合我的逻辑:

    SET @s = (SELECT IF(
        (SELECT COUNT(1)
            FROM INFORMATION_SCHEMA.COLUMNS
            WHERE table_name = 'your_table'
            AND table_schema = 'your_schema'
            AND column_name = 'column_name'
        ) > 0,
        "SELECT 1",
        "ALTER TABLE your_table ADD column_name VARCHAR(100)"
    ));
    
    PREPARE stmt FROM @s;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    【讨论】:

    • 好吧,我看它必须这么长。您能否帮我概括一下以使其可重用,因为要添加/删除数十个这样的列。每个人都这样做会很痛苦。
    • 不幸的是,每个 set 语句只能对单个操作数起作用。但是,您可以在单个语句中设置多个变量,例如set @a, @b=;如果此答案对您有用,请点赞。
    • @zhar Aazmi - 你不想用像 liquibase 这样的工具来做吗?他们可以为您生成所有必要的 SQL?
    • @BerndBuffen 实际上,我必须与我无法控制的应用程序进行交互。我只能提供一个将在那里执行的update.sql 文件。
    • @Izhar Aazm - 是的,没关系,但您可以使用 liquibase 生成此 update.sql 。那么你也没有新的 INDEX 或要删除的字段的问题
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 1970-01-01
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多