Come verificare se il database mysql esiste

È ansible verificare se esiste un database (MySQL) dopo aver effettuato una connessione.

So come verificare se esiste una tabella in un DB, ma ho bisogno di verificare se il DB esiste. Altrimenti devo chiamare un altro pezzo di codice per crearlo e popolarlo.

So che tutto questo sembra un po ‘poco elegante – questa è un’app rapida e sporca.

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

Se hai solo bisogno di sapere se esiste un db così non avrai un errore quando proverai a crearlo, semplicemente usa (Da qui ):

 CREATE DATABASE IF NOT EXISTS DBName; 

Un modo semplice per verificare se esiste un database è:

 SHOW DATABASES LIKE 'dbname'; 

Se il database con il nome ‘dbname’ non esiste, si ottiene un set vuoto. Se esiste, ottieni una riga.

Se stai cercando uno script php vedi sotto.

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

Dalla shell come 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 

Ecco una funzione di bash per verificare se esiste un database:

 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 } 

Un’altra alternativa è semplicemente provare a utilizzare il database. Nota che questo controlla anche il permesso:

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

un altro modo migliore per verificare se esiste un dabtabse è:

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

Questo è il metodo che uso sempre per verificare se il database esiste ….

 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; 

Per chi usa php con mysqli questa è la mia soluzione. So che alla risposta è già stata data una risposta, ma ho pensato che sarebbe stato utile avere anche la risposta come una dichiarazione preparata su 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(); 

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 

Una semplice fodera BASH:

 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 

Se si utilizza MSSQL invece di MySQL, vedere questa risposta da un thread simile .

Lungo e tortuoso (ma con me!), Ecco un sistema di classi che ho creato per verificare se esiste un DB e anche per creare le tabelle richieste:

 < ?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; } } 

In questo puoi sostituire il nome del database con qualsiasi nome di database che ti piace e anche cambiare lo script del creatore con qualsiasi cosa e (si spera!) Non lo romperà. Se qualcuno può migliorare questo, fammi sapere!

Nota
Se non usi Visual Studio con gli strumenti PHP, non preoccuparti delle regioni, sono loro per la piegatura del codice: P

Codice rotaie:

 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 esiste, entos_development1 non esiste

La seguente soluzione ha funzionato per me:

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

Sto usando semplicemente la seguente domanda:

 "USE 'DBname'" 

Quindi verificare se il risultato è FALSE. Altrimenti, potrebbe esserci un errore di accesso negato, ma non posso saperlo. Quindi, in caso di privilegi coinvolti, si può usare:

 "SHOW DATABASES LIKE 'DBname'" 

come già accennato in precedenza.

Con questo Script è ansible ottenere un database Sì o No, nel caso non esista non genera Eccezioni.

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