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

11 浏览
0 Comments

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

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

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'

\n当我想在MySQL中使用时,出现错误:\n

\n\'IF\'在此位置无效\n

\n我将此脚本更改为:\n

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'`

\n但是它仍然无法工作\n如何在MySQL中创建此查询?

0
0 Comments

MySQL中的"create database if not exist"问题的出现是因为需要在创建数据库之前先检查数据库是否已存在。如果数据库已存在,则不执行创建操作,否则执行创建操作。

解决方法是使用存储过程来检查数据库是否存在,并根据结果执行相应的操作。

下面是一个示例的存储过程:

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 @stmt=CONCAT('CREATE SCHEMA ',pDbName); -- 可以在此处添加其他参数,如字符集等
        PREPARE stmt1 FROM @stmt;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
        -- 在这里可以假设操作成功或者进行其他额外的确认步骤
        SET ret='DATABASE_CREATED';
    END IF;
    SELECT ret as 'col1';
END$$
DELIMITER ;

使用该存储过程来创建数据库的示例代码如下:

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

通过以上方法,可以确保在创建数据库之前先检查数据库是否已存在,并根据结果执行相应的操作。

0
0 Comments

MySQL的CREATE DATABASE语句可以用于创建数据库。如果数据库不存在,可以使用IF NOT EXISTS来避免重复创建。然而,有些情况下,用户希望在创建数据库时返回一个字符串来表示数据库的创建状态。下面是一个讨论如何解决这个问题的对话:

用户1:我不确定具体如何检查数据库是否存在,但是如果你只是希望在数据库不存在时创建它,你可以这样做:

CREATE DATABASE IF NOT EXISTS DBname

用户2:我知道可以使用IF NOT EXISTS来实现,但是我需要返回字符串'DATABASE_CREATED'或'DATABASE_EXIST'。我可以将其封装成一个存储过程并传递参数吗?

用户1:存储过程可以添加到数据库中,但是在创建数据库之前你需要创建一个帮助数据库。

用户2:对,可以在帮助数据库中调用存储过程。

根据以上对话,我们可以得出以下结论:用户想要在创建数据库时返回一个字符串表示数据库的创建状态。解决方法是创建一个存储过程,并在帮助数据库中调用它。在存储过程中使用CREATE DATABASE IF NOT EXISTS语句来创建数据库。

0