Ist es möglich zu prüfen, ob eine (MySQL) Datenbank existiert, nachdem eine Verbindung hergestellt wurde?.
Ich weiß, wie man prüft, ob eine Tabelle in einer Datenbank vorhanden ist, aber ich muss überprüfen, ob die Datenbank vorhanden ist. Wenn nicht, muss ich einen anderen Code aufrufen, um ihn zu erstellen und zu füllen.
Ich weiß, das klingt alles etwas unelegant - dies ist eine schnelle und schmutzige App.
SELECT SCHEMA_NAME
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME = 'DBName'
Wenn Sie nur wissen müssen, ob eine Datenbank vorhanden ist, so dass Sie beim Erstellen keine Fehlermeldung erhalten, verwenden Sie einfach (Von hier ):
CREATE DATABASE IF NOT EXISTS DBName;
Ein einfacher Weg, um zu prüfen, ob eine Datenbank existiert, ist:
SHOW DATABASES LIKE 'dbname';
Wenn die Datenbank mit dem Namen 'dbname' nicht vorhanden ist, erhalten Sie eine leere Gruppe. Wenn es existiert, erhalten Sie eine Zeile.
Wenn Sie nach einem PHP-Skript suchen, sehen Sie unten.
$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());
}
Von der Shell wie 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
eine weitere beste Möglichkeit, um zu überprüfen, ob eine Dabtabse existiert, ist:
$mysql = mysql_connect("<your Host>", "root", "");
if(mysql_select_db('<your db name>', $mysql)){
echo "databse exists";
}else{
echo "Databse does not exists";
}
Das ist die Methode, die ich immer verwende, um zu prüfen, ob eine Datenbank existiert ....
echo "rate if you enjoy :)";
Hier ist eine Bash-Funktion zum Überprüfen, ob eine Datenbank vorhanden ist:
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
}
Eine andere Alternative ist, einfach die Datenbank zu verwenden. Beachten Sie, dass dies auch die Berechtigung überprüft:
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
Ein sehr einfacher BASH-One-Liner:
mysqlshow | grep dbname
CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;
Bash benutzen:
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
Für diejenigen, die PHP mit MySQL verwenden, ist dies meine Lösung. Ich weiß, dass die Antwort bereits beantwortet wurde, aber ich dachte, es wäre hilfreich, die Antwort auch als mysqli vorbereitete Aussage zu haben.
$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();
SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
Lange gewunden und verwunden (aber bitte mit mir!), Hier ist ein Klassensystem, das ich gemacht habe, um zu überprüfen, ob eine DB existiert und auch die erforderlichen Tabellen zu erstellen:
<?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;
}
}
Hier können Sie den Datenbanknamen en
durch einen beliebigen Datenbanknamen ersetzen und auch das Erstellerskript beliebig ändern und (hoffentlich!) Es nicht beschädigen. Wenn jemand das verbessern kann, lass es mich wissen!
Hinweis
Wenn Sie Visual Studio nicht mit PHP - Werkzeugen verwenden, machen Sie sich keine Sorgen über die Regionen, sondern um die Code-Faltung: P
IF EXISTS (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = N'YourDatabaseName')
BEGIN
-- Database exists, so do your stuff here.
END
Wenn Sie MSSQL anstelle von MySQL verwenden, lesen Sie diese Antwort aus einem ähnlichen Thread .
Mit diesem Skript können Sie Ja oder Nein Datenbank erhalten, falls es nicht existiert, wird keine Ausnahme ausgelöst.
SELECT
IF(EXISTS( SELECT
SCHEMA_NAME
FROM
INFORMATION_SCHEMA.SCHEMATA
WHERE
SCHEMA_NAME = 'DbName'),
'Yes',
'No') as exist
Ich verwende einfach die folgende Abfrage:
"USE 'DBname'"
Dann prüfen Sie, ob das Ergebnis FALSE ..__ ist. Andernfalls könnte ein Fehler mit Zugriff verweigert werden, aber ich kann nicht wissen, dass . Im Falle von Privilegien können Sie Folgendes verwenden:
"SHOW DATABASES LIKE 'DBname'"
wie schon früher erwähnt.
Schienencode:
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 existiert, entos_development1 existiert nicht
Folgende Lösung hat für mich funktioniert:
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} \
-s -N -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_DATABASE}'"