Как проверить, существует ли база данных mysql
Можно ли проверить, существует ли (MySQL) база данных после создания соединения.
Я знаю, как проверить, существует ли таблица в БД, но мне нужно проверить, существует ли БД. Если нет, я должен вызвать другой фрагмент кода, чтобы создать его и заполнить его.
Я знаю, что все это звучит несколько неэлегантно - это быстрое и грязное приложение.
Ответы
Ответ 1
SELECT SCHEMA_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'DBName'
Если вам просто нужно знать, существует ли база данных, чтобы при попытке ее создания не возникло ошибки, просто используйте (Отсюда):
CREATE DATABASE IF NOT EXISTS DBName;
Ответ 2
Простой способ проверить, существует ли база данных:
SHOW DATABASES LIKE 'dbname';
Если база данных с именем "dbname" не существует, вы получаете пустой набор. Если он существует, вы получаете одну строку.
Ответ 3
Если вы ищете php script, см. ниже.
$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());
}
Ответ 4
Из оболочки, как bash
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
Ответ 5
Вот функция 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
Ответ 6
Отличный способ проверить, существует ли база данных в 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
Очень простой BASH -one-liner:
mysqlshow | grep dbname
Ответ 8
CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;
Ответ 9
SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
Ответ 10
Использование 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
Ответ 11
Для тех, кто использует 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();
Ответ 12
Длинные намотки и извитости (но несут меня!), вот система классов, которую я сделал, чтобы проверить, существует ли БД, а также для создания необходимых таблиц:
<?php
class Table
{
public static function Script()
{
return "
CREATE TABLE IF NOT EXISTS `users` ( `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT );
";
}
}
class Install
{
#region Private constructor
private static $link;
private function __construct()
{
static::$link = new mysqli();
static::$link->real_connect("localhost", "username", "password");
}
#endregion
#region Instantiator
private static $instance;
public static function Instance()
{
static::$instance = (null === static::$instance ? new self() : static::$instance);
return static::$instance;
}
#endregion
#region Start Install
private static $installed;
public function Start()
{
var_dump(static::$installed);
if (!static::$installed)
{
if (!static::$link->select_db("en"))
{
static::$link->query("CREATE DATABASE `en`;")? $die = false: $die = true;
if ($die)
return false;
static::$link->select_db("en");
}
else
{
static::$link->select_db("en");
}
return static::$installed = static::DatabaseMade();
}
else
{
return static::$installed;
}
}
#endregion
#region Table creator
private static function CreateTables()
{
$tablescript = Table::Script();
return static::$link->multi_query($tablescript) ? true : false;
}
#endregion
private static function DatabaseMade()
{
$created = static::CreateTables();
if ($created)
{
static::$installed = true;
}
else
{
static::$installed = false;
}
return $created;
}
}
В этом вы можете заменить имя базы данных en
любым именем базы данных, которое вам нравится, а также сменить создателя script на что угодно и (надеюсь,!) он не сломает его. Если кто-то может это улучшить, дайте мне знать!
Примечание
Если вы не используете Visual Studio с инструментами PHP, не беспокойтесь о регионах, они предназначены для складывания кода: P
Ответ 13
Код Rails:
ruby-1.9.2-p290 :099 > ActiveRecord::Base.connection.execute("USE INFORMATION_SCHEMA")
ruby-1.9.2-p290 :099 > ActiveRecord::Base.connection.execute("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'entos_development'").to_a
SQL (0.2ms) SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'entos_development'
=> [["entos_development"]]
ruby-1.9.2-p290 :100 > ActiveRecord::Base.connection.execute("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'entos_development1'").to_a
SQL (0.3ms) SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'entos_development1'
=> []
= > enos_development существует, entos_development1 не существует
Ответ 14
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, см. этот ответ из аналогичного потока.
Ответ 15
Я использую просто следующий запрос:
"USE 'DBname'"
Затем проверьте, является ли результат FALSE.
В противном случае может быть отказано в доступе, но я не могу этого знать.
Таким образом, в случае привилегий можно использовать:
"SHOW DATABASES LIKE 'DBname'"
как уже упоминалось ранее.
Ответ 16
С помощью этого скрипта вы можете получить Да или Нет, база данных существует, в случае, если она не существует, она не вызывает исключение.
SELECT
IF(EXISTS( SELECT
SCHEMA_NAME
FROM
INFORMATION_SCHEMA.SCHEMATA
WHERE
SCHEMA_NAME = 'DbName'),
'Yes',
'No') as exist
Ответ 17
Следующее решение сработало для меня:
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} \
-s -N -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_DATABASE}'"