是否可以在建立连接后检查MySQL数据库是否存在。

我知道如何检查一个表是否存在于一个DB,但我需要检查DB是否存在。如果不是,我必须调用另一段代码来创建它并填充它。

我知道这一切听起来有点不优雅-这是一个快速和肮脏的应用程序。


当前回答

在使用like语句检查是否存在时要小心!

如果在一系列不幸的事件中,你的变量最终为空,你最终执行这个:

SHOW DATABASES like '' -- dangerous!

它将返回ALL数据库,从而告诉调用脚本它存在,因为返回了一些行。

使用“=”等号来测试是否存在是更安全、更好的做法。

正确和安全的测试方法应该是:

SHOW DATABASES WHERE `database` = 'xxxxx' -- safe way to test for existence

注意,您必须用反引号来包装列名数据库,在这种情况下不能使用宽松的语法。

这样,如果创建变量“xxxxx”的代码返回空,那么SHOW DATABASES将不会返回ALL数据库,而是返回一个空集。

其他回答

CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;

对于那些使用php与mysqli然后这是我的解决方案。我知道答案已经回答了,但我认为这将是有帮助的答案作为一个mysqli准备的声明。

$db = new mysqli('localhost',username,password);
$database="somedatabase";
$query="SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=?";
$stmt = $db->prepare($query);
$stmt->bind_param('s',$database);
$stmt->execute();
$stmt->bind_result($data);
if($stmt->fetch())
{
    echo "Database exists.";
}
else
{
    echo"Database does not exist!!!";
}
$stmt->close();
IF EXISTS (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = N'YourDatabaseName')
BEGIN    
    -- Database exists, so do your stuff here.
END

如果你正在使用MSSQL而不是MySQL,可以从类似的线程中看到这个答案。

另一个php解决方案,但与PDO:

<?php
try {
   $pdo = new PDO('mysql:host=localhost;dbname=dbname', 'root', 'password', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]);
   echo 'table dbname exists...';
}
catch (PDOException $e) {
   die('dbname not found...');
}

下面的解决方案对我来说很有效:

mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} \
-s -N -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_DATABASE}'"