【问题标题】:Re-runnable mysql upgrade script可重新运行的mysql升级脚本
【发布时间】:2026-01-15 08:15:01
【问题描述】:

mysql 有没有办法编写可重新运行的 sql 脚本? 我尝试了 : 'IF EXISTS' 语法,但这似乎只适用于存储过程。 'select if' 语法似乎不能满足我的要求。

理想情况下,我想做这样的事情:

IF NOT EXISTS (select * from table where name='Name') Then insert into table values('Name');
else select 'Name has already been inserted into table';
end if;

谢谢。

【问题讨论】:

  • 查看 MySQL 手册,您可以在“控制结构”下找到所需的一切

标签: mysql mysql-management


【解决方案1】:

您也许可以使用:

INSERT IGNORE INTO t1 ...

您可以从返回中看到是否插入了一行。请注意,它要求存在唯一约束,否则您只会得到重复项。如果你有一个主键,这也是一个唯一约束。

【讨论】:

    【解决方案2】:

    也许您可以将您的数据库架构修订存储在合适的表中,并将其用作更新处理的标准?

    【讨论】:

      【解决方案3】:
      insert into myTable(name)
      select 'some_name_value' from myTable
      where not exists (select 1 from myTable where name = 'some_name_value')
      limit 1;
      

      如果值不存在,将插入它们。

      【讨论】:

        【解决方案4】:

        我们使用类似 (SQL Server) 的构造

        IF 0 = (SELECT COUNT(*) FROM <your table> WHERE <your condition>)
        BEGIN
            <your work here>
        END
        

        管理我们希望可重复的 SQL 部分。如果重新运行脚本并且值在那里,则 count(*) 不为零,它不会再次执行此工作。

        【讨论】:

        • 这似乎是最有希望的,但它是否依赖于特定版本的mysql?它似乎在 5.0 中不起作用......你能提供一个更完整的例子吗?
        • 正如我所指出的,语法来自 SQL Server。 技术 应该翻译。我不知道 MySql 为流控制提供什么过程语言,比如 T/SQL。