【问题标题】:MySQL create database if not existMySQL如果不存在则创建数据库
【发布时间】:2017-03-13 00:13:08
【问题描述】:

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

【问题讨论】:

  • 你为什么不使用像“CREATE DATABASE IF NOT EXISTS DBName;”这样的简单语句?看看这个例子 - forums.mysql.com/read.php?101,213455,213496
  • 你也可以看到这个 SO 帖子 - stackoverflow.com/questions/838978/…
  • 问题重新标记为 microsoft sql-server
  • @Drew 他们在询问如何在 MySQL 中做到这一点。
  • @MartinSmith 但是看看剩下的,master.dbo.sysdatabases ...我不知道他们在引用什么,除了软表先生

标签: mysql


【解决方案1】:

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

CREATE DATABASE IF NOT EXISTS DBname

【讨论】:

  • 我知道我可以使用IF NOT EXISTS,但我需要返回字符串'DATABASE_CREATED''DATABASE_EXIST'
  • 然后用它制作一个存储过程并传递一个参数
  • @Szymson 如果您知道自己拥有什么服务器类型,也会有所帮助。我似乎甚至不是mysql,所以我将您的问题重新标记给了微软
  • 存储的过程可以添加到数据库,但我需要先创建数据库
  • 对。调用辅助数据库中的存储过程。
【解决方案2】:

这是一个辅助(永久)数据库中的示例。该数据库的名称是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

【讨论】:

  • 谢谢这是我需要的:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 2019-03-06
  • 2017-10-15
相关资源
最近更新 更多