接続後に(MySQL)データベースが存在するかどうかを確認することは可能ですか?mysqlデータベースが存在するかどうかを確認する方法
DBにテーブルが存在するかどうかを確認する方法は分かっていますが、DBが存在するかどうかを確認する必要があります。そうでなければ、別のコードを呼び出してそれを作成しなければなりません。
私はこのすべてが幾分優雅ではないことを知っています - これはすばやく汚いアプリです。
接続後に(MySQL)データベースが存在するかどうかを確認することは可能ですか?mysqlデータベースが存在するかどうかを確認する方法
DBにテーブルが存在するかどうかを確認する方法は分かっていますが、DBが存在するかどうかを確認する必要があります。そうでなければ、別のコードを呼び出してそれを作成しなければなりません。
私はこのすべてが幾分優雅ではないことを知っています - これはすばやく汚いアプリです。
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'DBName'
あなただけのDBは、あなたがそれを作成しようとするので、あなたは(hereから)簡単に使用し、エラーを取得することはありませんが存在するかどうかを知る必要がある場合:
CREATE DATABASE IF NOT EXISTS DBName;
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());
}
の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
存在しません10bashの
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
これは実際には機能しません... 代わりに ' result = $(mysql -s -N -e" SCHEMA_NAME = 'db' "のINFORMATION_SCHEMA.SCHEMATAからSELECT SCHEMA_NAMEを選択してください。 [-z "$ result"]; then エコー "db does not exist"; fi –
@ StevenGreenのこれの改良はうまく動作するので、bash/sqlスニペットに+1してください。 – Bobble
あなたのユーザの詳細を、コマンドラインまたは.my.cnfを介して忘れてはいけません。 –
のようなシェルからデータベースが存在するかどうかを確認する簡単な方法は次のとおりです。
SHOW DATABASES LIKE 'dbname';
名「DBNAME」を持つデータベースが存在しない場合は、あなたが空を取得セット。存在する場合は、1つの行が取得されます。ここで
解決策が正しく機能していることを確認してください。ありがとう] –
この方法は、受け入れられた答えよりも遅いです – CIRCLE
この良い答えを説明している正式な情報については、コマンドに関する公式サイトのドキュメントページhttp://dev.mysql.com/doc/refman/5.5/ja/を参照してください。 show-databases.html(有用なチュートリアルのページは私にそれをもたらしました。http://dev.mysql.com/doc/refman/5.5/en/database-use.html( "MySQL 5.5リファレンスマニュアル/チュートリアル/作成と使用データベース ")。 – Edward
は、データベースが存在するかどうかをチェックするための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
}
別の方法としては、単にデータベースを使用しようとすることです。これは、同様の権限をチェックすることに注意してください:
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
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を使用している場合は、このanswer from a similar threadを参照してください。
これはMySQLのではなく、MSSQLのです –
SELECT IF('database_name' IN(SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA), 1, 0) AS found;
dabtabseが存在するかどうかをチェックする別の最良の方法は次のとおりです。私はいつも、データベースが存在するかどうかを確認するために使用する方法をある
$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 :)";
言語はPHPです – ceed
CREATE SCHEMA IF NOT EXISTS `demodb` DEFAULT CHARACTER SET utf8 ;
次の解決策は私のために働いた:
mysql -u${MYSQL_USER} -p${MYSQL_PASSWORD} \
-s -N -e "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME='${MYSQL_DATABASE}'"
長い風に巻き込まれた(しかし、私には負担がかかる!)、ここで私は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を使用していない場合、彼らは、コードの折りたたみのためのものである:P
使用の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
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();
非常に簡単なBASH-ワンライナー:
mysqlshow | grep dbname
私は単純に次のクエリを使用しています:
"USE 'DBname'"
結果がFALSEであれば、確認してください。 それ以外の場合、アクセス拒否エラーが発生する可能性がありますが、そのことはわかりません。 ので、関係する権限の場合には、一つは使用することができます。
"SHOW DATABASES LIKE 'DBname'"
すでに前述したように。
最初は良いです。 2番目のものはそうではありません。データベース作成権限がない可能性があります。 –
@OllieJones 2番目の方もいいです。OPがデータベースを作成したいと答えた場合、回答者は仮定しています – nawfal
なぜ「INFORMATION_SCHEMA」がすべて大文字ですか?私の場合は小文字である – Hubro