在建立数据库连接后,有没有可能检查数据库(MySQL)是否存在。
我知道如何检查 DB 中是否存在表,但我需要检查 DB 是否存在。如果不存在,我必须调用另一段代码来创建并填充它。
我知道这听起来有点不太优雅 - 这只是一个快速而简单的应用程序。
在建立数据库连接后,有没有可能检查数据库(MySQL)是否存在。
我知道如何检查 DB 中是否存在表,但我需要检查 DB 是否存在。如果不存在,我必须调用另一段代码来创建并填充它。
我知道这听起来有点不太优雅 - 这只是一个快速而简单的应用程序。
SELECT SCHEMA_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'DBName'
如果你只需要知道数据库是否存在,以便在尝试创建它时不会出现错误,请简单地使用以下代码(来自于 这里):
CREATE DATABASE IF NOT EXISTS DBName;
检查数据库是否存在的简单方法是:
SHOW DATABASES LIKE 'dbname';
如果名为“dbname”的数据库不存在,则会得到一个空集。如果它存在,您将得到一行数据。like
来测试存在性,因为如果变量为空,它可能会导致返回所有数据库,请查看我的下面的回复:https://dev59.com/THRA5IYBdhLWcg3wwwzD#61273393 - Wadih M.来自像bash这样的shell
if [[ ! -z "`mysql -qfsBe "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='db'" 2>&1`" ]];
then
echo "DATABASE ALREADY EXISTS"
else
echo "DATABASE DOES NOT EXIST"
fi
如果你正在寻找一段PHP脚本,请参考以下内容。
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Not connected : ' . mysql_error());
}
// make foo the current db
$db_selected = mysql_select_db('foo', $link);
if (!$db_selected) {
die ('Cannot use foo : ' . mysql_error());
}
mysqlshow | grep dbname
prefix_dbname_suffix
等的数据库,因为 grep
匹配包含该字符串的行,而不是完全等于该字符串的行。 - Flimm这是一个用于检查数据库是否存在的Bash函数:
function does_db_exist {
local db="${1}"
local output=$(mysql -s -N -e "SELECT schema_name FROM information_schema.schemata WHERE schema_name = '${db}'" information_schema)
if [[ -z "${output}" ]]; then
return 1 # does not exist
else
return 0 # exists
fi
}
另一个选择是尝试使用数据库。请注意,这也会检查权限:
if mysql "${db}" >/dev/null 2>&1 </dev/null
then
echo "${db} exists (and I have permission to access it)"
else
echo "${db} does not exist (or I do not have permission to access it)"
fi
>/dev/null
可以保证结果始终为空。尝试类似这样的语句 if [ -z "$(mysql ${db} 2>&1 </dev/null)" ]; then ...
。 - Bobble>/dev/null
并不会改变运行 mysql
的退出代码,它只是在出现错误时隐藏输出。if ...; then
部分检查退出代码。 - docwhat使用Bash:
if [ "`mysql -u'USER' -p'PASSWORD' -se'USE $DATABASE_NAME;' 2>&1`" == "" ]; then
echo $DATABASE_NAME exist
else
echo $DATABASE_NAME doesn't exist
fi
如果您使用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();
在PHP中检查数据库是否存在的好方法是:
$mysql = mysql_connect("<your host>", "root", "");
if (mysql_select_db($mysql, '<your db name>')) {
echo "Database exists";
} else {
echo "Database does not exist";
}
使用like语句检查存在时一定要小心!
如果不幸的是,你的变量最终为空,并且你执行了以下操作:
SHOW DATABASES like '' -- dangerous!
这将返回所有的数据库,因此告诉调用脚本它存在,因为返回了一些行。
使用"="等号测试是否存在要更安全、更好的做法。
正确和安全的测试存在的方法应该是:
SHOW DATABASES WHERE `database` = 'xxxxx' -- safe way to test for existence