如何检查mysql数据库是否存在
是否可以检查一个(MySQL)数据库是否存在连接后。
我知道如何检查数据库中是否存在表,但是我需要检查数据库是否存在。 如果没有,我必须调用另一段代码来创build它并填充它。
我知道这一切听起来有点不雅 – 这是一个快速和肮脏的应用程序。
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'DBName'
如果你只是需要知道一个数据库是否存在,所以当你尝试创build它时不会出错,只需使用(从这里 ):
CREATE DATABASE IF NOT EXISTS DBName;
检查数据库是否存在的简单方法是:
SHOW DATABASES LIKE 'dbname';
如果名称为“dbname”的数据库不存在,您将得到一个空集。 如果它确实存在,你会得到一行。
如果你正在寻找一个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()); }
从壳像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
检查dabtabse是否存在的另一个最佳方法是:
$mysql = mysql_connect("<your host>", "root", ""); if(mysql_select_db('<your db name>', $mysql)){ echo "databse exists"; }else{ echo "Databse does not exists"; }
这是我总是用来检查数据库是否存在的方法….
echo "rate if you enjoy :)";
这里是一个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 }
另一种select是试图使用数据库。 请注意,这也检查权限:
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
SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;
使用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
对于那些谁使用php与mysqli那么这是我的解决scheme。 我知道答案已经回答了,但是我认为将答案作为一个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();
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,请从类似的线程查看此答案 。
啰嗦和烦躁(但忍受我!),这是一个类系统,我做了检查是否存在一个数据库,也创build所需的表:
<?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; } }
在这里,你可以用你喜欢的任何数据库名称replace数据库名称,也可以把创build者脚本改为任何东西,(希望!)它不会破坏它。 如果有人能改善这个,让我知道!
注意
如果您不使用Visual Studio与PHP工具,不要担心区域,他们是代码折叠:P
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存在,entos_development1不存在
一个非常简单的BASH-one-liner:
mysqlshow | grep dbname
以下解决scheme为我工作:
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} \ -s -N -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_DATABASE}'"
我正在使用简单的以下查询:
"USE 'DBname'"
然后检查结果是否为FALSE。 否则,可能会有访问被拒绝的错误,但我不知道。 所以,在涉及特权的情况下,可以使用:
"SHOW DATABASES LIKE 'DBname'"
如前所述。