মাইএসকিএল ডাটাবেস বিদ্যমান কিনা তা পরীক্ষা করে দেখুন


292

কোনও সংযোগ স্থাপনের পরে কোনও (মাইএসকিউএল) ডাটাবেস উপস্থিত রয়েছে কিনা তা পরীক্ষা করা কি সম্ভব?

আমি জানি যে কীভাবে কোনও ডিবিতে কোনও টেবিল বিদ্যমান আছে তা চেক করতে হবে, তবে আমার ডিবি রয়েছে কিনা তা খতিয়ে দেখা উচিত। যদি না হয় তবে আমি এটি তৈরি করতে এবং পপুলেট করার জন্য অন্য একটি কোডের কল করতে হবে।

আমি জানি এই সমস্ত শব্দগুলি কিছুটা অবাস্তব নয় - এটি একটি দ্রুত এবং ময়লা অ্যাপ।

উত্তর:


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

আপনার যদি কেবল কোনও ডিবি রয়েছে কিনা তা জানা দরকার যাতে আপনি এটি তৈরির চেষ্টা করার সময় ত্রুটি পাবেন না, কেবল (এখান থেকে ) ব্যবহার করুন :

CREATE DATABASE IF NOT EXISTS DBName;

9
প্রথম এক ভাল। দ্বিতীয়টি এত বেশি নয়। আপনার কাছে ডাটাবেস তৈরি করার সুবিধা নেই।

21
@ অলি জোনস দ্বিতীয়টি খুব ভাল, উত্তরদাতা ধরে
নিচ্ছেন

3
সমস্ত ক্যাপগুলিতে কেন "INFORMATION_SCHEMA" রয়েছে? আমার সাথে এটি সমস্ত নিম্নতর ক্ষেত্রে
হুব্রো

3
* ঠিক আছে, স্পষ্টতই পিএইচপিএমআইএডমিন কেবল নিম্ন ক্ষেত্রে সমস্ত ডাটাবেসের নাম প্রদর্শন করে এবং আপনার কোয়েরি যেভাবেই হোক উভয়ই ব্যবহার করে কাজ করে
হুব্রো

1
@ নওফালের সাথে সম্মত হন; আমি হয়ত ডিবি তৈরি করতে চাইব না, কেবল এটির বিদ্যমান কিনা তা জেনে নিন।
স্টিভসিংক 30'17

122

একটি ডাটাবেস বিদ্যমান কিনা তা পরীক্ষা করার একটি সহজ উপায় হ'ল:

SHOW DATABASES LIKE 'dbname';

যদি 'dbname' নামের ডেটাবেস উপস্থিত না থাকে, আপনি একটি খালি সেট পাবেন। যদি এটি বিদ্যমান থাকে তবে আপনি একটি সারি পাবেন।


1
আরও ভাল কাজ করেছেন তখন সমাধানটি সঠিক হিসাবে চিহ্নিত হয়েছে। ধন্যবাদ]
জন উইলিয়ামস

এই উত্তরের উত্তরের ব্যাখ্যা করে এমন সরকারী তথ্যের জন্য, কমান্ডটি সম্পর্কে অফিসিয়াল ওয়েবসাইটের ডকুমেন্টেশন পৃষ্ঠায় যান: dev.mysql.com/doc/refman/5.5/en/show-datedias.html (একটি দরকারী টিউটোরিয়াল পৃষ্ঠা আমাকে তাতে নিয়ে গেছে, দেব .mysql.com / ডক / রেফম্যান / 5.5 / en / ডাটাবেস-use.html ( "মাইএসকিউএল 5.5 রেফারেন্স ম্যানুয়াল / টিউটোরিয়াল / নির্মাণ ও একটি ডাটাবেস ব্যবহার")।
এডওয়ার্ড

2
এটি INFORMATION_SCHEMA সরাসরি জিজ্ঞাসা করার চেয়ে ধীর হতে পারে, তবে এটি অনেক বেশি পাঠযোগ্য এবং সহজেই বোঝা যায়, যা আমার ক্ষেত্রে আরও গুরুত্বপূর্ণ বিবেচনা ছিল।
ড্যানিয়েল হাওয়ার্ড

এটি একটি আরও ভাল সমাধান কারণ আপনি যদি কোনও ডাটাবেসের অস্তিত্বের জন্য পরীক্ষা করেন তবে আপনি এটি তৈরি করতে চাইতে পারেন। "উপস্থিত না থাকলে ডাটাবেস তৈরি করুন" বিরক্তিকর কারণ কারণ যদি ডাটাবেসটি সারণি নির্ধারণ করতে নিম্নলিখিত কোডের উপস্থিত থাকে তবে বোমা ফাটাবে। কমান্ডটি কীভাবে কার্যকর তা আমি দেখতে পাচ্ছি না।
কেয়ার

@ কীর এটি বিরক্তিকর বলে মনে হলেও একই সময়ে একই ডাটাবেস তৈরি করার চেষ্টা করার জন্য দুটি থ্রেড কল্পনা করুন এবং যদি ব্যর্থ হয় তবে কী ঘটবে। এটি তৈরির চেষ্টা করার আগে কোনও ডাটাবেস উপস্থিত রয়েছে কিনা তা নির্ধারণের জন্য এটি কার্যকর নয় তবে একাধিক থ্রেড এটি তৈরি করার চেষ্টা করতে গিয়ে সংঘর্ষ প্রতিরোধে কার্যকর।
ব্রোগান

22

আপনি যদি পিএইচপি স্ক্রিপ্ট খুঁজছেন তবে নীচে দেখুন।

$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

বাশের মতো খোল থেকে

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

3
এটি আসলে কাজ করে না ... পরিবর্তে এর মতো কিছু চেষ্টা করুন: `ফলাফল = $ (mysql -s -N -e" তথ্য নির্বাচন করুন SCHEMA_NAME নির্বাচন করুন CH যদি [-z "$ ফলাফল"]; তারপরে "db উপস্থিত নেই" প্রতিধ্বনি; ফাই
স্টিভেন সবুজ

1
@ স্টিভেনগ্রিনের এটির অভিযোজনটি সূক্ষ্মভাবে কাজ করে, সুতরাং বাশ / এসকিএল স্নিপেটের জন্য +1।
ববলে

কমান্ড লাইনে বা .my.cnf এর মাধ্যমে আপনার ব্যবহারকারীর বিবরণ অন্তর্ভুক্ত করতে ভুলবেন না।
মিঃ গুবরি

11

ডাটাবেস উপস্থিত রয়েছে কিনা তা যাচাই করার জন্য এখানে বাশ ফাংশন রয়েছে:

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

বিকল্পের জন্য +1, তবে >/dev/nullফলাফলটি সর্বদা নালার গ্যারান্টি দেয়। এরকম কিছু চেষ্টা করুন if [ -z "$(mysql ${db} 2>&1 </dev/null)" ]; then ...
ববলে

@ Bobble দের >/dev/nullথেকে প্রস্থান কোডটি পরিবর্তন করে না mysql। যদি কোনও ত্রুটি থাকে তবে এটি আউটপুটটি গোপন করে। if ...; thenঅংশ প্রস্থান কোড পরীক্ষা করে।
ডকুয়েট

9

পিএইচপি-তে কোনও ডাটাবেস রয়েছে কিনা তা যাচাই করার একটি দুর্দান্ত উপায়:

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

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

এই পদ্ধতিটি আমি সর্বদা ব্যবহার করি।


7

একটি খুব সাধারণ বেস-ও-লাইনার:

mysqlshow | grep dbname



4

যারা পিএসএইচপি দিয়ে মাইসকিলি দিয়ে থাকেন তবে এটি আমার সমাধান। আমি জানি উত্তরটি ইতিমধ্যে উত্তর দেওয়া হয়েছে, তবে আমি ভেবেছিলাম উত্তরটি মাইসকলি প্রস্তুত বিবৃতি হিসাবে পাওয়াও সহায়ক হবে।

$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

ব্যাশ ব্যবহার:

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

2

লম্বা বাতাসযুক্ত এবং সংশ্লেষিত (তবে আমার সাথে সহ্য করুন!), এখানে একটি ডিবি রয়েছে কিনা তা যাচাই করতে এবং প্রয়োজনীয় টেবিলগুলি তৈরি করার জন্য আমি তৈরি করেছি এমন একটি শ্রেণিবদ্ধ ব্যবস্থা:

<?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 আপনি নিজের পছন্দ মতো যে কোনও সাথে করতে পারেন এবং স্রষ্টা স্ক্রিপ্টকে যে কোনও কিছুতে পরিবর্তন করতে পারেন এবং (আশা করি!) এটি ভঙ্গ করবে না। যদি কেউ এর উন্নতি করতে পারে তবে আমাকে জানান!

দ্রষ্টব্য
আপনি যদি পিএইচপি সরঞ্জামগুলির সাথে ভিজ্যুয়াল স্টুডিও ব্যবহার না করেন তবে অঞ্চলগুলি সম্পর্কে চিন্তা করবেন না, তারা কোড ফোল্ডিংয়ের জন্য: পি


2

এই স্ক্রিপ্টের সাহায্যে আপনি হ্যাঁ বা কোনও ডাটাবেস উপস্থিত থাকতে পারেন, যদি এটি বিদ্যমান না থাকে তবে এটি ব্যতিক্রম ছুঁড়ে না দেয়।

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

1

রেল কোড:

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'
=> []

=> এনটোস_ ডেভলপমেন্ট বিদ্যমান, এনটোস_ ডেভলপমেন্ট 1 বিদ্যমান নেই


1
IF EXISTS (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = N'YourDatabaseName')
BEGIN    
    -- Database exists, so do your stuff here.
END

আপনি যদি মাইএসকিউএল এর পরিবর্তে এমএসএসকিউএল ব্যবহার করছেন তবে অনুরূপ থ্রেড থেকে এই উত্তরটি দেখুন ।


এটি এমএসকিউএল এর জন্য, মাইএসকিউএল নয়
এরিন ড্রামমন্ড

1

আমি কেবল নীচের প্রশ্নটি ব্যবহার করছি:

"USE 'DBname'"

তারপরে ফলাফলটি মিথ্যা কিনা তা পরীক্ষা করে দেখুন। অন্যথায়, একটি অ্যাক্সেস অস্বীকার ত্রুটি হতে পারে, কিন্তু আমি এটি জানতে পারি না। সুতরাং, জড়িত সুবিধাগুলির ক্ষেত্রে, কেউ এটি ব্যবহার করতে পারেন:

"SHOW DATABASES LIKE 'DBname'"

যেমন ইতিমধ্যে পূর্বে উল্লিখিত।


1

ব্যাশ স্ক্রিপ্টের ভিতরে এটি করার আমার উপায় এখানে:

#!/bin/sh

DATABASE_USER=*****
DATABASE_PWD=*****
DATABASE_NAME=my_database

if mysql -u$DATABASE_USER -p$DATABASE_PWD -e "use $DATABASE_NAME";
then
echo "Database $DATABASE_NAME already exists. Exiting."
exit
else
echo Create database
mysql -u$DATABASE_USER -p$DATABASE_PWD -e "CREATE DATABASE $DATABASE_NAME"
fi

0

নিম্নলিখিত সমাধানটি আমার পক্ষে কাজ করেছে:

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

0

আরেকটি পিএইচপি সমাধান, তবে পিডিও সহ:

<?php
try {
   $pdo = new PDO('mysql:host=localhost;dbname=dbname', 'root', 'password');
   echo 'table dbname exists...';
}
catch (PDOException $e) {
   die('dbname not found...');
}

0

গোলং সমাধান

একটি পরীক্ষা প্যাকেজ তৈরি করুন এবং যুক্ত করুন:

import "database/sql"

// testing database creation
func TestCreate(t *testing.T){
    Createdb("*Testdb") // This just calls the **sql.DB obect *Testdb 
    db,err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/*Testdb")
    if err != nil{
        panic(err)
    }
    defer db.Close()
    _, err = db.Exec("USE *Testdb")
    if err != nil{
        t.Error("Database not Created")
    }

} 

0

অনুরূপ বিবৃতি সহ অস্তিত্বের জন্য পরীক্ষা করার সময় সাবধান!

যদি দুর্ভাগ্যজনক ঘটনার ধারাবাহিকতায় আপনার পরিবর্তনশীলটি খালি হয়ে যায় এবং আপনি এটি সম্পাদন করেন:

SHOW DATABASES like '' -- dangerous!

এটি সমস্ত ডাটাবেস ফিরিয়ে দেবে , এইভাবে কলিং স্ক্রিপ্টকে বলে যে কিছু সারি ফিরে আসার পর থেকে এটি বিদ্যমান।

অস্তিত্বের জন্য পরীক্ষার জন্য "=" সমান চিহ্নটি ব্যবহার করা অনেক নিরাপদ এবং আরও ভাল অনুশীলন ।

অস্তিত্বের জন্য পরীক্ষার সঠিক ও নিরাপদ উপায়টি হ'ল:

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

নোট করুন যে আপনাকে কলামের নাম ডাটাবেসটিকে ব্যাকটিক্স সহ মোড়া করতে হবে, এটি এক্ষেত্রে শিথিল বাক্য গঠন ব্যবহার করতে পারে না।

এইভাবে, কোডটি যদি ভেরিয়েবল 'xxxxxxx' তৈরি করে ফাঁকা ফিরে আসে, তবে দেখান ডেটাবেসগুলি সমস্ত ডাটাবেসগুলি ফিরিয়ে দেবে না, তবে একটি খালি সেট প্রদান করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.