如何检查mysql数据库是否存在

Ank*_*kur 278 mysql database exists

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

我知道如何检查数据库中是否存在表,但我需要检查数据库是否存在.如果不是,我必须调用另一段代码来创建它并填充它.

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

Kir*_*tan 441

SELECT SCHEMA_NAME
  FROM INFORMATION_SCHEMA.SCHEMATA
 WHERE SCHEMA_NAME = 'DBName'
Run Code Online (Sandbox Code Playgroud)

如果您只需要知道数据库是否存在,那么在尝试创建数据库时就不会出现错误,只需使用(从此处):

CREATE DATABASE IF NOT EXISTS DBName;
Run Code Online (Sandbox Code Playgroud)

  • @OllieJones第二个也很好,回答者假设OP想要创建一个数据库 (21认同)
  • 第一个好.第二个不是那么多.您可能没有数据库创建权限. (8认同)
  • 为什么"INFORMATION_SCHEMA"全部上限?对我来说,它是小写的 (3认同)
  • *好的,显然PHPMyAdmin只显示小写的所有数据库名称,无论如何你的查询都可以使用 (3认同)

小智 113

检查数据库是否存在的简单方法是:

SHOW DATABASES LIKE 'dbname';
Run Code Online (Sandbox Code Playgroud)

如果名称为"dbname"的数据库不存在,则会得到一个空集.如果确实存在,则会得到一行.

  • 此方法比接受的答案慢 (2认同)
  • 这可能比直接查询INFORMATION_SCHEMA慢,但是它更具可读性和易于理解性,在我的案例中这是更重要的考虑因素。 (2认同)

小智 22

如果您正在寻找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());
}
Run Code Online (Sandbox Code Playgroud)


Ask*_*ter 21

从像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
Run Code Online (Sandbox Code Playgroud)

  • 这实际上不起作用......而是尝试类似:`result = $(mysql -s -N -e"SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME ='db'"); 如果[-z"$ result"]; 然后echo"db不存在"; 科幻 (3认同)

doc*_*hat 10

这是一个用于检查数据库是否存在的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
}           
Run Code Online (Sandbox Code Playgroud)

另一种方法是尝试使用数据库.请注意,这也检查权限:

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
Run Code Online (Sandbox Code Playgroud)


小智 9

另一种检查dabtabse是否存在的最佳方法是:

$mysql = mysql_connect("<your host>", "root", "");

if (mysql_select_db($mysql, '<your db name>')) {
    echo "Database exists";
} else {
    echo "Database does not exist";
}
Run Code Online (Sandbox Code Playgroud)

这是我总是用来检查数据库是否存在的方法....

$mysql = mysql_connect("<your host>", "root", "");

if (mysql_select_db($mysql, '<your db name>')) {
    echo "Database exists";
} else {
    echo "Database does not exist";
}
Run Code Online (Sandbox Code Playgroud)

  • 语言是php (2认同)

and*_*iba 7

一个非常简单的BASH-one-liner:

mysqlshow | grep dbname
Run Code Online (Sandbox Code Playgroud)

  • 这也将匹配名为“prefix_dbname_suffix”等的数据库,因为“grep”匹配包含该字符串的行,而不是完全等于该字符串的行。 (2认同)

Wad*_* M. 7

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

如果在一系列不幸的事件中,您的变量最终为空,并且您最终会执行以下命令:

SHOW DATABASES like '' -- dangerous!
Run Code Online (Sandbox Code Playgroud)

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

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

测试存在性的正确且安全的方法应该是:

SHOW DATABASES WHERE `database` = 'xxxxx' -- safe way to test for existence
Run Code Online (Sandbox Code Playgroud)

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

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


ine*_*nja 6

使用 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
Run Code Online (Sandbox Code Playgroud)


Tho*_*ams 6

对于那些将 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();
Run Code Online (Sandbox Code Playgroud)


小智 6

这是我在 bash 脚本中执行此操作的方法:

#!/bin/sh

DATABASE_USER=*****
DATABASE_PWD=*****
DATABASE_NAME=my_database

if mysql -u$DATABASE_USER -p$DATABASE_PWD -e "use $DATABASE_NAME";
then
echo "Database $DATABASE_NAME already exists. Exiting."
exit
else
echo Create database
mysql -u$DATABASE_USER -p$DATABASE_PWD -e "CREATE DATABASE $DATABASE_NAME"
fi
Run Code Online (Sandbox Code Playgroud)


小智 5

SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
Run Code Online (Sandbox Code Playgroud)


jpr*_*ism 5

CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;
Run Code Online (Sandbox Code Playgroud)