MySQL如果不存在则创建数据库
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中创建此查询?
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
通过以上方法,可以确保在创建数据库之前先检查数据库是否已存在,并根据结果执行相应的操作。
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语句来创建数据库。