web-dev-qa-db-fra.com

Comment vérifier si la base de données mysql existe

Est-il possible de vérifier si une base de données (MySQL) existe après avoir établi une connexion?.

Je sais comment vérifier si une table existe dans une base de données, mais je dois vérifier si la base de données existe. Sinon, je dois appeler un autre morceau de code pour le créer et le remplir.

Je sais que tout cela semble un peu inélégant - c'est une application rapide et sale.

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

Si vous avez juste besoin de savoir si une base de données existe pour ne pas avoir d'erreur lorsque vous essayez de la créer, utilisez simplement (From here ):

CREATE DATABASE IF NOT EXISTS DBName;
389
Kirtan

Un moyen simple de vérifier si une base de données existe consiste à:

SHOW DATABASES LIKE 'dbname';

Si la base de données avec le nom 'nombase' n'existe pas, vous obtenez un ensemble vide. S'il existe, vous obtenez une ligne.

102
Ruben Konig

Si vous recherchez un script php, voir ci-dessous.

$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

De la coquille comme 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

une autre meilleure façon de vérifier si une dabtabse existe est la suivante:

$mysql = mysql_connect("<your Host>", "root", "");

if(mysql_select_db('<your db name>', $mysql)){
    echo "databse exists";
}else{
    echo "Databse does not exists";
}

C'est la méthode que j'utilise toujours pour vérifier si la base de données existe ....

echo "rate if you enjoy :)";
9
Junaid Saleem

Voici une fonction bash permettant de vérifier si une base de données existe:

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
}           

Une autre alternative consiste simplement à utiliser la base de données. Notez que cela vérifie également les permissions:

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

Un très simple BASH-one-liner:

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

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

Pour ceux qui utilisent php avec mysqli, voici ma solution. Je sais que la réponse a déjà été donnée, mais j’ai pensé qu’il serait également utile d’avoir la réponse sous forme de déclaration 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();
4
Thomas Williams
SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
4
Alex

Longue et compliquée (mais supportez-moi!), Voici un système de classes que j'ai créé pour vérifier si un DB existe et pour créer les tables requises:

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

En cela, vous pouvez remplacer le nom de la base de données en par le nom de la base de données de votre choix et modifier le script du créateur en un mot quelconque (et j'espère!), Cela ne le cassera pas. Si quelqu'un peut améliorer cela, faites le moi savoir!

Remarque
Si vous n'utilisez pas Visual Studio avec les outils PHP, ne vous inquiétez pas des régions, ce sont elles pour le pliage du code: 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

Si vous utilisez MSSQL au lieu de MySQL, voyez cette réponse d'un fil similaire .

2
deadlydog

Avec ce script, vous pouvez obtenir la base de données Oui ou Non, au cas où elle n'existe pas, elle ne lance pas Exception.

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

J'utilise simplement la requête suivante:

"USE 'DBname'"

Puis vérifiez si le résultat est FALSE . Sinon, il pourrait y avoir une erreur d’accès refusé, mais je ne peux pas savoir que . Ainsi, dans le cas de privilèges impliqués, on peut utiliser:

"SHOW DATABASES LIKE 'DBname'"

comme déjà mentionné précédemment.

1
Apostolos

Rails Code:

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 existe, entos_development1 n'existe pas

1
wxianfeng

La solution suivante a fonctionné pour moi:

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