web-dev-qa-db-ja.com

mysqlデータベースが存在するかどうかを確認する方法

接続した後に(MySQL)データベースが存在するかどうかをチェックすることは可能ですか?.

テーブルがDBに存在するかどうかを確認する方法はわかっていますが、DBが存在するかどうかを確認する必要があります。そうでない場合は、それを作成してデータを投入するために別のコードを呼び出す必要があります。

私はこれがすべていくぶん洗練されていないように思えることを知っています - これは速くて汚いアプリです。

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

データベースを作成するときにエラーが発生しないように、データベースが存在するかどうかを確認するだけでよい場合は、単に(From ここ )を使用します。

CREATE DATABASE IF NOT EXISTS DBName;
410
Kirtan

データベースが存在するかどうかを確認する簡単な方法は次のとおりです。

SHOW DATABASES LIKE 'dbname';

'dbname'という名前のデータベースが存在しない場合は、空のセットになります。存在する場合は、1行になります。

105
Ruben Konig

あなたがphpスクリプトを探しているなら、下記を見てください。

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

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
19

これはデータベースが存在するかどうかをチェックするためのbash関数です。

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
}           

もう1つの方法は、単にデータベースを使用してみることです。これは同様に許可をチェックします:

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

ダブタブが存在するかどうかを確認するもう1つの最良の方法は次のとおりです。

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

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

それは私が常にデータベースが存在するかどうかを確認するために使用する方法です....

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

とてもシンプルなBASHワンライナー:

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

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

Mysqliでphpを使う人にとって、これが私の解決策です。私は答えがすでに答えられているのを知っています、しかし私はそれが同じく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

長い間、複雑になっていましたが(ただし、私には負けないでください)、DBが存在するかどうかを確認し、必要なテーブルを作成するために作成したクラスシステムを次に示します。

<?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を好きなデータベース名に置き換えたり、作成者スクリプトをなんらかの名前に変更したりすることができます。誰もがこれを改善することができれば、私に知らせて!


PHPツールを使用してVisual Studioを使用しなくても、地域について心配する必要はありません。それらはコードの折りたたみのためのものです。

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

MySQLの代わりにMSSQLを使用している場合は、この 同様のスレッドからの回答 を参照してください。

1
deadlydog

このスクリプトを使用すると、YesまたはNoデータベースが存在しますが、存在しない場合はExceptionをスローしません。

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

私は単に以下のクエリを使用しています。

"USE 'DBname'"

次に結果がFALSEかどうかを確認してください。そうでなければ、アクセス拒否エラーがあるかもしれませんが、私はそれを知ることができません。したがって、特権が含まれる場合は、次のものを使用できます。

"SHOW DATABASES LIKE 'DBname'"

すでに前述したように。

1
Apostolos

Railsコード:

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が存在し、entos_development1が存在しません

1
wxianfeng

次の解決策は私のために働いた:

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