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