it-swarm.com.de

Wie prüft man, ob die MySQL-Datenbank existiert?

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.

245
Ankur
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;
389
Kirtan

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.

102
Ruben Konig

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

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
18

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 :)";
9
Junaid Saleem

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
9
docwhat

Ein sehr einfacher BASH-One-Liner:

mysqlshow | grep dbname
6
andiba
CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;
5
jprism

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
4
inemanja

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();
4
Thomas Williams
SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
4
Alex

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

2
Sam Swift 웃
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 .

2
deadlydog

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
1
Threading

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.

1
Apostolos

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

1
wxianfeng

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}'"
0