【问题标题】:How exit a MySQL script if a database exists如果数据库存在,如何退出 MySQL 脚本
【发布时间】:2016-01-31 07:01:55
【问题描述】:

我在 docker 中有一个 SQL 脚本,但我只想在它之前没有运行过的情况下运行该脚本。所以,我虽然我会有类似的东西:

IF dbname EXISTS
THEN
    exit;
END IF;

环顾四周,我设法找到了如果数据库存在则返回 0 或 1 的代码:

SELECT IF(EXISTS(SELECT SCHEMA_NAME 
    FROM INFORMATION_SCHEMA.SCHEMATA 
    WHERE SCHEMA_NAME = 'mysql'),true,false);

但我不知道如何将其转换为退出语句

IF(EXISTS (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'mysql')
THEN
    exit;
END IF;

给出多个语法错误。

我正在使用 CentOS 6.7 和 MySQL 服务器 5.1.73(忘记在 CentOS 7 之前它不是 MariaDB)

【问题讨论】:

标签: mysql if-statement exit


【解决方案1】:

什么意思?脚本会创建任何东西吗? 如果是,你可以使用这个技巧:

IF SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA 
WHERE SCHEMA_NAME = 'demo-database' then

  CREATE DATABASE `demo-database`
  // do other stuff ect

ENDIF

这可能行得通。至少对我来说确实如此;)

【讨论】:

  • 我的 SQL 脚本创建数据库并插入数据。差不多有 8000 行,所以我不想把整个事情放在一个 if 语句中。
  • 这是我困惑的根源。如果我在 mysql interactive 中输入您的代码,我会得到: ERROR 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'IF SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'dem' 附近使用正确的语法
【解决方案2】:

经过进一步的思考和研究,我认为这是 MySQL 控制台的一个限制。我将我的 SQL“脚本”视为一个脚本,它实际上只是一个命令列表。 MySQL 中的 IF 语句实际上设计为 SELECT 语句的一部分。因此,我决定在 bash 脚本中运行 SQL 命令。

【讨论】:

    【解决方案3】:

    如果脚本存在,而不是导致某个动作,只有当脚本不存在时才发生你的原始动作,例如

    CREATE DATABASE IF NOT EXISTS DBName;
    ///all the rest of your SQL, 
    

    这意味着只有当数据结构不存在时,SQL 才会运行。这看起来像你想要的。

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 2016-06-23
      • 2020-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多