Как проверить, существует ли база данных mysql - PullRequest
258 голосов
/ 08 мая 2009

Можно ли проверить, существует ли база данных (MySQL) после установления соединения.

Я знаю, как проверить, существует ли таблица в БД, но мне нужно проверить, существует ли БД. Если нет, я должен вызвать другой кусок кода, чтобы создать его и заполнить его.

Я знаю, что все это звучит несколько не элегантно - это быстрое и грязное приложение.

Ответы [ 17 ]

410 голосов
/ 08 мая 2009
SELECT SCHEMA_NAME
  FROM INFORMATION_SCHEMA.SCHEMATA
 WHERE SCHEMA_NAME = 'DBName'

Если вам просто нужно знать, существует ли БД, чтобы при попытке его создания не возникло ошибки, просто используйте (От здесь ):

CREATE DATABASE IF NOT EXISTS DBName;
105 голосов
/ 17 июня 2012

Простой способ проверить, существует ли база данных:

SHOW DATABASES LIKE 'dbname';

Если база данных с именем 'dbname' не существует, вы получаете пустой набор. Если он существует, вы получите одну строку.

22 голосов
/ 08 мая 2009

Если вы ищете скрипт 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());
}
19 голосов
/ 28 марта 2012

Из скорлупы, как Баш

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
10 голосов
/ 14 сентября 2012

Вот функция 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
9 голосов
/ 12 декабря 2014

Отличный способ проверить, существует ли база данных в PHP:

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

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

Это метод, который я всегда использую.

7 голосов
/ 10 апреля 2017

Очень простой BASH-one-liner:

mysqlshow | grep dbname
5 голосов
/ 04 января 2015
CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;
4 голосов
/ 20 июля 2016

Для тех, кто использует 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();
4 голосов
/ 11 ноября 2015

Использование 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
...