336

接続後に (MySQL) データベースが存在するかどうかを確認することは可能ですか。

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

私はこれがやや洗練されていないように聞こえることを知っています - これは速くて汚いアプリです.

4

23 に答える 23

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

データベースを作成しようとしたときにエラーが発生しないように、データベースが存在するかどうかを知りたいだけの場合は、次のようにします (ここから):

CREATE DATABASE IF NOT EXISTS DBName;
于 2009-05-08T09:26:54.653 に答える
145

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

SHOW DATABASES LIKE 'dbname';

「dbname」という名前のデータベースが存在しない場合は、空のセットが取得されます。存在する場合は、1 行を取得します。

于 2012-06-17T10:15:51.430 に答える
23

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
于 2012-03-27T21:43:35.323 に答える
21

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());
}
于 2009-05-08T09:26:27.133 に答える
12

データベースが存在するかどうかを確認するための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
于 2012-09-14T15:48:48.483 に答える
8

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();
于 2016-07-20T12:57:42.427 に答える
5
SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
于 2013-03-23T03:45:16.087 に答える
4

このスクリプトを使用すると、データベースが存在するかどうかを取得できます。データベースが存在しない場合、例外はスローされません。

SELECT 
    IF(EXISTS( SELECT 
                SCHEMA_NAME
            FROM
                INFORMATION_SCHEMA.SCHEMATA
            WHERE
                SCHEMA_NAME = 'DbName'),
        'Yes',
        'No')  as exist
于 2018-07-03T00:59:50.370 に答える
3

likeステートメントで存在をチェックするときは注意してください!

一連の不幸な出来事で変数が空になってしまい、これを実行することになった場合:

SHOW DATABASES like '' -- dangerous!

すべてのデータベースが返されるため、一部の行が返されたため、呼び出し元のスクリプトにデータベースが存在することが通知されます。

「=」等号を使用して存在をテストする方が、はるかに安全で優れた方法です。

存在をテストするための正しく安全な方法は次のとおりです。

SHOW DATABASES WHERE `database` = 'xxxxx' -- safe way to test for existence

列名データベースをバックティックでラップする必要があることに注意してください。この場合、緩和された構文は使用できません。

このように、変数 'xxxxx' を作成するコードが空白を返した場合、SHOW DATABASES はすべてのデータベースを返すのではなく、空のセットを返します。

于 2020-04-17T13:57:03.397 に答える
1
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 を使用している場合は、同様のスレッドからのこの回答を参照してください。

于 2013-02-26T23:09:38.343 に答える
1

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 なし

于 2012-02-16T08:04:22.067 に答える