我在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)
答案 0 :(得分:1)
IF SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'demo-database' then
CREATE DATABASE `demo-database`
// do other stuff ect
ENDIF
这可能有用。至少对我来说它确实如此;)
答案 1 :(得分:0)
经过进一步的思考和研究,我认为这是MySQL控制台的限制。我在处理我的SQL"脚本"作为一个脚本,它实际上只是一个命令列表。 MySQL中的IF语句确实是SELECT语句的一部分。所以,我决定在bash脚本中运行SQL命令。
答案 2 :(得分:0)
如果脚本存在,而不是引起某个操作,只有当脚本存在 NOT 时才会发生原始操作,例如
CREATE DATABASE IF NOT EXISTS DBName;
///all the rest of your SQL,
这意味着只有在数据结构不存在的情况下才会运行SQL。这看起来像你想要的。