如果数据库不存在,则创建MySQL数据库

28

我有一个T-SQL查询,如果数据库还不存在,则创建它:

IF (NOT EXISTS (SELECT name 
                FROM master.dbo.sysdatabases 
                WHERE ('[' + 'DBName' + ']' = 'DBName'
                   OR name = 'DBName')))
BEGIN 
    CREATE DATABASE DBName

    PRINT 'DATABASE_CREATED' 
END 
ELSE 
    PRINT 'DATABASE_EXIST'

当我想在MySQL中使用这个时,出现了错误:

'IF' 不是有效的输入位置

我将这个脚本更改为:

IF(SELECT COUNT(*) FROM SCHEMA_NAME 
   FROM INFORMATION_SCHEMA.SCHEMATA 
   WHERE SCHEMA_NAME = 'DBName') > 0)
THEN BEGIN 
    CREATE DATABASE DBName

    PRINT 'DATABASE_CREATED'
ELSE 
    PRINT 'DATABASE_EXIST'`

但它仍然无法工作。

我如何在MySQL中创建此查询?


您也可以查看这些Stack Overflow的帖子 - https://dev59.com/THRA5IYBdhLWcg3wwwzD - Wasi Ahmad
@Drew,他们正在询问如何在MySQL中实现。 - Martin Smith
@MartinSmith 但是看看其他的部分,“master.dbo.sysdatabases”……除了微软表之外,我不知道他们在引用什么。 - Drew
我写了一条在MSSQL中的查询。 - Szymson
哦,好的,我的错。所以你想在MySQL中实现这个。 - Drew
显示剩余3条评论
2个回答

110

我不确定该如何检查,但如果您只想在不存在时创建它,则可以执行以下操作

CREATE DATABASE IF NOT EXISTS DBname

我知道可以使用 IF NOT EXISTS,但我需要返回字符串 'DATABASE_CREATED''DATABASE_EXIST' - Szymson
1
将其制作成存储过程并传递参数。 - Drew
@Szymson 如果您知道您使用的服务器类型,那将会很有帮助。看起来它甚至不是 mysql,所以我重新标记了您的问题为 Microsoft。 - Drew
存储过程可以添加到数据库,但是我需要先创建数据库。 - Szymson
1
没问题。在辅助数据库中调用存储过程。 - Drew

9
这是一个帮助数据库(永久性)的示例。该数据库的名称为permanent
一次性创建数据库:
create schema permanent;

现在请确保你:
USE permanent;

然后

存储过程:

DROP PROCEDURE IF EXISTS createDB;  
DELIMITER $$
CREATE PROCEDURE createDB(IN pDbName VARCHAR(100))  
BEGIN
    DECLARE preExisted INT;
    DECLARE ret VARCHAR(50);

    SET ret='DATABASE_EXIST';
    SELECT COUNT(*) INTO preExisted
    FROM INFORMATION_SCHEMA.SCHEMATA
    WHERE SCHEMA_NAME=pDbName;
    IF preExisted=0 THEN
        SET @sql=CONCAT('CREATE SCHEMA ',pDbName); -- add on any other parts of string like charset etc
        PREPARE stmt1 FROM @sql;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
        -- right here you could assume it worked or take additional
        -- step to confirm it
        SET ret='DATABASE_CREATED';
    END IF;
    SELECT ret as 'col1';
END$$
DELIMITER ;

测试:

use permanent;
call createDB('xyz');
-- returns col1 DATABASE_CREATED
call createDB('xyz');
-- returns col1 DATABASE_EXIST

谢谢,这正是我所需要的 :) - Szymson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接