tutorial Come verificare se il database mysql esiste




use mysql workbench (13)

La seguente soluzione ha funzionato per me:

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

È possibile verificare se esiste un database (MySQL) dopo aver effettuato una connessione.

So come verificare se esiste una tabella in un DB, ma ho bisogno di verificare se il DB esiste. Altrimenti devo chiamare un altro pezzo di codice per crearlo e popolarlo.

So che tutto questo sembra un po 'poco elegante - questa è un'app rapida e sporca.


SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;

Codice rotaie:

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 esiste, entos_development1 non esiste


Una semplice fodera BASH:

mysqlshow | grep dbname

Dalla shell come 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

Per chi usa php con mysqli questa è la mia soluzione. So che alla risposta è già stata data una risposta, ma ho pensato che sarebbe stato utile avere anche la risposta come una dichiarazione preparata su 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();

Sto usando semplicemente la seguente domanda:

"USE 'DBname'"

Quindi verificare se il risultato è FALSE. Altrimenti, potrebbe esserci un errore di accesso negato, ma non posso saperlo. Quindi, in caso di privilegi coinvolti, si può usare:

"SHOW DATABASES LIKE 'DBname'"

come già accennato in precedenza.


Un modo semplice per verificare se esiste un database è:

SHOW DATABASES LIKE 'dbname';

Se il database con il nome 'dbname' non esiste, si ottiene un set vuoto. Se esiste, ottieni una riga.


Ecco una funzione di bash per verificare se esiste un database:

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
}           

Un'altra alternativa è semplicemente provare a utilizzare il database. Nota che questo controlla anche il permesso:

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

Usando 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

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

Se hai solo bisogno di sapere se esiste un db così non avrai un errore quando proverai a crearlo, semplicemente usa (Da here ):

CREATE DATABASE IF NOT EXISTS DBName;

Lungo e tortuoso (ma con me!), Ecco un sistema di classi che ho creato per verificare se esiste un DB e anche per creare le tabelle richieste:

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

In questo puoi sostituire il nome del database con qualsiasi nome di database che ti piace e anche cambiare lo script del creatore con qualsiasi cosa e (si spera!) Non lo romperà. Se qualcuno può migliorare questo, fammi sapere!

Nota
Se non usi Visual Studio con gli strumenti PHP, non preoccuparti delle regioni, sono loro per la piegatura del codice: P


CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;




exists