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.
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;
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.
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());
}
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
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 :)";
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
Un très simple BASH-one-liner:
mysqlshow | grep dbname
CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;
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
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();
SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
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
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 .
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
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.
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
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}'"