我在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);但我想不出如何将其转换为exit语句
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 )
发布于 2016-01-29 01:02:38
你是什么意思?该脚本是否创建了任何内容?如果是,你可以使用这个技巧:
IF SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'demo-database' then
CREATE DATABASE `demo-database`
// do other stuff ect
ENDIF这可能行得通。至少对我来说是这样的。)
发布于 2016-01-31 06:27:04
经过进一步的思考和研究,我认为这是MySQL控制台的一个局限性。我把我的SQL“脚本”当作一个脚本,实际上它只是一个命令列表。MySQL中的IF语句实际上被设计为SELECT语句的一部分。因此,我决定在bash脚本中运行SQL命令。
发布于 2016-01-31 07:01:55
不要在脚本存在的情况下导致某个操作,而是只在脚本不存在的情况下才执行原始操作,例如
CREATE DATABASE IF NOT EXISTS DBName;
///all the rest of your SQL, 这意味着只有在数据结构不存在的情况下,SQL才会运行。这看起来就是你想要的。
https://stackoverflow.com/questions/35067278
复制相似问题