MySQL创建数据库(如果不存在)

MySQL创建数据库(如果不存在),mysql,Mysql,我有一个T-SQL查询,如果数据库还不存在,它会创建数据库: IF (NOT EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE ('[' + 'DBName' + ']' = 'DBName' OR name = 'DBName'))) BEGIN CREATE DATABASE DBName PRINT 'DA

我有一个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(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中创建此查询?

我不确定您将如何检查,但如果您只是想在不存在的情况下创建它,那么您可以这样做

CREATE DATABASE IF NOT EXISTS DBname

以下是助手(永久)数据库中的示例。该数据库的名称是永久的

一次性数据库创建:

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 ;
测试:


为什么不使用简单的语句,比如“如果数据库不存在,创建数据库DBName;”?看看这个例子-你也可以看到这样的帖子-问题被重新标记到microsoft
sql server
@Drew他们在问如何在MySQL中实现它。@MartinSmith,但看看它的其余部分,
master.dbo.sysdatabases
。。。除了Mster softie Tables,我不知道他们在引用什么。我知道如果不存在,我可以使用
,但我需要返回字符串
“DATABASE\u CREATED”(数据库创建)
“DATABASE\u EXIST”(数据库存在)
,然后从中生成一个存储过程并传递一个parameter@Szymson如果您知道自己的服务器类型,也会有所帮助。我看起来甚至不是mysql,所以我把你的问题重新标记到了microsoftstored proc,可以添加到数据库中,但我需要先创建数据库。调用helper db中的存储过程。谢谢,这正是我所需要的:)
use permanent;
call createDB('xyz');
-- returns col1 DATABASE_CREATED
call createDB('xyz');
-- returns col1 DATABASE_EXIST