355 Stimmen

Wie prüft man, ob eine mysql-Datenbank existiert?

Ist es möglich zu überprüfen, ob eine (MySQL) Datenbank existiert, nachdem eine Verbindung hergestellt wurde.

Ich weiß, wie ich prüfen kann, ob eine Tabelle in einer DB existiert, aber ich muss prüfen, ob die DB existiert. Wenn nicht, muss ich einen anderen Code aufrufen, um sie zu erstellen und zu füllen.

Ich weiß, das klingt alles etwas unelegant - dies ist eine schnelle und schmutzige Anwendung.

0voto

Die folgende Lösung hat bei mir funktioniert:

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

0voto

Damunza Punkte 1

Golang-Lösung

ein Testpaket erstellen und hinzufügen:

import "database/sql"

// testing database creation
func TestCreate(t *testing.T){
    Createdb("*Testdb") // This just calls the **sql.DB obect *Testdb 
    db,err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/*Testdb")
    if err != nil{
        panic(err)
    }
    defer db.Close()
    _, err = db.Exec("USE *Testdb")
    if err != nil{
        t.Error("Database not Created")
    }

}

0voto

a1an Punkte 3214

Die Verwendung des INFORMATION_SCHEMA o show databases ist nicht zuverlässig, wenn Sie nicht über ausreichende Rechte verfügen, um die Datenbank einzusehen. Es wird den Anschein erwecken, dass die DB nicht existiert, obwohl Sie keinen Zugriff auf sie haben. Die Erstellung würde dann anschließend fehlschlagen. Eine andere Möglichkeit, eine präzisere Prüfung durchzuführen, ist die Verwendung der Ausgabe des use-Befehls, obwohl ich nicht weiß, wie zuverlässig dieser Ansatz ist (die Textausgabe ändert sich in zukünftigen Versionen / anderen Sprachen...), also sei gewarnt.

CHECK=$(mysql -sNe "use DB_NAME" 2>&1)
if [ $? -eq 0 ]; then
  # database exists and is accessible
elif [ ! -z "$(echo $CHECK | grep 'Unknown database')" ]; then
  # database does not exist
elif [ ! -z "$(echo $CHECK | grep 'Access denied')" ]; then
  # cannot tell if database exists (not enough permissions)"
else
  # unexpected output
fi

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X