Cómo verificar si existe una base de datos mysql

¿Es posible verificar si existe una base de datos (MySQL) después de haber hecho una conexión?

Sé cómo verificar si existe una tabla en un DB, pero necesito verificar si el DB existe. Si no, tengo que llamar a otra parte del código para crearlo y poblarlo.

Sé que todo esto suena poco elegante, esta es una aplicación rápida y sucia.

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'DBName' 

Si solo necesita saber si existe una base de datos para que no se produzca un error cuando intente crearla, simplemente use (desde aquí ):

 CREATE DATABASE IF NOT EXISTS DBName; 

Una manera simple de verificar si existe una base de datos es:

 SHOW DATABASES LIKE 'dbname'; 

Si la base de datos con el nombre ‘dbname’ no existe, obtendrá un conjunto vacío. Si existe, obtienes una fila.

Si está buscando un script php, consulte a continuación.

 $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()); } 

Desde el caparazón como 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 

Aquí hay una función bash para verificar si existe una base de datos:

 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 } 

Otra alternativa es tratar de usar la base de datos. Tenga en cuenta que esto también verifica el permiso:

 if mysql "${db}" >/dev/null 2>&1  

otra mejor manera de verificar si existe un dabtabse es:

 $mysql = mysql_connect("", "root", ""); if(mysql_select_db('', $mysql)){ echo "databse exists"; }else{ echo "Databse does not exists"; } 

Ese es el método que siempre uso para verificar si existe una base de datos …

 echo "rate if you enjoy :)"; 
 CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ; 
 SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found; 

Para aquellos que usan php con mysqli, esta es mi solución. Sé que la respuesta ya ha sido respondida, pero pensé que sería útil tener la respuesta como una statement preparada por mysqli también.

 $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(); 

Usando 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 

Un BASH-one-liner muy simple:

 mysqlshow | grep dbname 
 IF EXISTS (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = N'YourDatabaseName') BEGIN -- Database exists, so do your stuff here. END 

Si está utilizando MSSQL en lugar de MySQL, vea esta respuesta de un hilo similar .

De largo aliento y complicado (¡pero tengan paciencia!), Aquí hay un sistema de clases que hice para verificar si existe un DB y también para crear las tablas requeridas:

 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 esto puede reemplazar el nombre de la base de datos con cualquier nombre de base de datos que desee y también puede cambiar el script del creador a cualquier cosa y (¡con suerte!) No lo romperá. Si alguien puede mejorar esto, ¡házmelo saber!

Nota
Si no usa Visual Studio con herramientas PHP, no se preocupe por las regiones, son ellas para el plegado de códigos: P

Código de 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' => [] 

=> entos_development existe, entos_development1 no existe

La siguiente solución funcionó para mí:

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

Estoy usando simplemente la siguiente consulta:

 "USE 'DBname'" 

Luego verifica si el resultado es FALSO. De lo contrario, podría haber un error de acceso denegado, pero no puedo saberlo. Entonces, en caso de privilegios involucrados, uno puede usar:

 "SHOW DATABASES LIKE 'DBname'" 

como ya se mencionó anteriormente.

Con este script puedes obtener la base de datos Sí o No, en caso de que no exista, no lanza Exception.

 SELECT IF(EXISTS( SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'DbName'), 'Yes', 'No') as exist