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

Szy*_*son 11 mysql

我有一个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'
Run Code Online (Sandbox Code Playgroud)

当我想在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'`
Run Code Online (Sandbox Code Playgroud)

但它仍然无效

如何在MySQL中创建此查询?

小智 38

我不确定你究竟是怎么检查的,但如果你只是想创建它,如果它不存在,那么你可以做

CREATE DATABASE IF NOT EXISTS DBname
Run Code Online (Sandbox Code Playgroud)


Dre*_*rew 7

这是助手(永久)数据库中的示例。那个数据库的名字是permanent

一次数据库创建:

create schema permanent;
Run Code Online (Sandbox Code Playgroud)

现在确保你

USE permanent;
Run Code Online (Sandbox Code Playgroud)

然后

存储过程:

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 ;
Run Code Online (Sandbox Code Playgroud)

测试:

use permanent;
call createDB('xyz');
-- returns col1 DATABASE_CREATED
call createDB('xyz');
-- returns col1 DATABASE_EXIST
Run Code Online (Sandbox Code Playgroud)