MySQL criar uma base de dados se não existir
tenho uma consulta T-SQL que cria uma base de dados se ainda não existir:
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'
Quando quero usar isto no MySQL, tenho um erro:
'IF' não é uma entrada válida nesta posição
mudo este guião como
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'`
Mas ainda não funciona.
Como posso criar esta consulta no MySQL?
7
Author: Martin Smith, 2016-10-30
2 answers
Aqui está o exemplo numa base de Dados Auxiliar (permanente). O nome do cadáver é permanent
One time db create:
create schema permanent;
Agora certifica-te que
USE permanent;
Depois
Proc Armazenado:
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 ;
Teste:
use permanent;
call createDB('xyz');
-- returns col1 DATABASE_CREATED
call createDB('xyz');
-- returns col1 DATABASE_EXIST
3
Author: Drew, 2016-10-30 21:42:42
Não sei exatamente como você verificaria, mas se você só quer criá-lo se ele não existe, então você pode fazer
CREATE DATABASE IF NOT EXISTS DBname
20
Author: Dec Sander, 2016-10-30 20:24:47