データベースの管理(作成、削除)
データベースとは、実際にデータを収める複数のテーブルやビュー,トリガといったスクリプトを統括し管理するためのものです。
ここでは MySQL データベースの管理における、データベースの作成、削除について解説します。 データベースの管理は、mysql にログインしてから SQL のクエリーで行います。
データベースを管理する上での注意点
ユーザーについて
データベースの作成はスーパーユーザーもしくはデータベースを作成することが許可されたユーザーであることが必要です。
Ubuntu で MySQL を標準インストールするとスーパーユーザーはroot
です。ここでは話を簡単にするためにユーザーはroot
として解説します。
もしもサーバーとして運用するためなら、まずは mysql_secure_installation
によってセキュリティー設定をおこないます。さらに、スーパーユーザー、ユーザーの追加を検討した方がよいでしょう。
データベースの操作、特にデーターの追加、更新、削除といった操作を root のような一般的によく知られたスーパーユーザーで行えるようにしておくのはセキュリティー上好ましくありません。
外部からデータベースに接続できるのが一般的に知られたスーパーユーザーにしておくと、ログインできた場合にデータベースのすべてが改変できるためです。
データベースの作成やデータ操作は別名のユーザーまたはローカル接続のみから行えるようにしておいた方がよいでしょう。
データベースの一覧
MySQL における既に作成されたのデーターベースの確認方法です。
mysql にログイン後に SHOW databases; を実行します。
$ sudo mysql
...
mysql> SHOW databases;
...
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
...
information_schema
は全てのデータベースを管理するためのメタデータを保持しているデータベースです。MySQL サーバーが管理しています。
performance_schema
はクエリやトランザクションの実行によるログが記録されるデータベースです。
データベースの作成
新規にデータベースを作成する方法です。データベースの作成はスーパーユーザーまたはデータベースの作成権限をもつユーザーでなければなりません。
以下はスーパーユーザーroot
によるデータベースの作成例です。
mysql にログインまたは SQL コマンドが使える環境で CREATE DATABASE
クエリーを実行します。
$ sudo mysql
...
# CREATE DATABASE dbname;
この場合、root のデータベースとして作成されます。
オーナーを指定したデータベース作成
任意のユーザーを指定してデータベースを作成することもできます。
方法としては、データベースを作成するときに任意のユーザーをオーナーとして設定します。普段はこのオーナーユーザーでデータベースと接続します。
ここでオーナーにするユーザーは事前に追加しておかなければなりません。
mysql> CREATE DATABASE dbname OWNER rolename;
作成が成功しても何の応答もないので、上記の「データベースの一覧」で作成状況を確認してください。
スーパーユーザーだけがデータベースを操作できることは危険ですので、他のユーザーでデータベースが操作できるようにした方がよいでしょう。
rolename
はロール名です。データベースではユーザーは正確にはロールとして扱います。ロールはデータベースの操作権限をもったユーザーのことです。
特に、API やネットワークを通したデータベースへの接続認証はロール
で管理します。ユーザー認証が必要な場面ではロールとして管理されていることを憶えておいたほうがよいでしょう。
ユーザー、ロールについて詳しくはユーザー(ロール)管理
ページを参照してください。
データベースにログインユーザを登録
データベースに任意のログインユーザーを新規登録することができます。
psqlコマンドプロンプト
psql my_database ... foodatabase=# create role foo_usr with login; CREATE ROLE
この例では、ユーザfoo_usrがmy_databaseにアクセスできるようになります。
詳しくはロール(ユーザー)の追加
を参照してください。
データベースに接続
作成したデータベースにテーブルやビューを作成したりデータを編集するためには、データベースを指定し接続しなければなりません。
データベースに接続する方法には、mysql コマンドでデータベースを指定する、mysql コマンドプロンプトで USE コマンドを実行する方法があります。
mysql コマンドでは -p オプションでデータベースを指定します
$ mysql -u username -p db_name ... mysql>
-u オプションは mysql にログインするユーザーの指定です。
現在使用中のデータベース
現在接続中のデータベースを確認するには SELECT クエリーで databse() 関数を使用します。
mysql> SELECT databse();
もしも以下のように database() カラムの内容が NULL の場合は使用中のデータベースがないことを示しています。
+------------+
| database() |
+------------+
| NULL |
+------------+
...
データベースを切り替えるには以下のような use クエリーを実行します。
データベース切り替え
mysql にログインした状態でデータベースを切り替えるには USE コマンドを使用します。
mysql> use other_db; Database changed
SELECT databse() を実行して以下のようにデータベースが表示されたらデータベースの切り替えができています。
mysql> show tables;
+------------+
| database() |
+------------+
| other_db |
+------------+
...
詳細なデータベースの確認
現在使用できるデータベースについて詳細なデータを確認するには、SHOW PROCESSLIST クエリーを実行します。
mysql> SHOW PROCESSLIST;
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 1357 | Waiting on empty queue | NULL |
| 8 | root | localhost | NULL | Query | 0 | init | SHOW PROCESSLIST |
+----+-----------------+-----------+------+---------+------+------------------------+------------------+
...
db の項目をみてみると NULL と表示されています。現在データベースがないことが分かります。
データベースの削除
データベースを削除するには、データベースの作成権限をもつユーザまたはデータベースオーナーで、DROP クエリーを実行します。
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
例えば db_name データベースを削除するには以下のようなクエリーを実行します。
mysql> DROP db_name
指定データベースがあるかを確認するには以下のようにします。
mysql> DROP IF EXISTS db_name;
指定したデータベースがない場合はエラーが出て終了するための配慮です。
その他
データベースのディレクトリ初期化
データベースのディレクトリ初期化は、データベースの領域となるディレクトリを指定するものです。この例では、デフォルト(環境変数PGDATA)のディレクトリに作成します。
シェルコマンド
$ initdb
ディレクトリ指定をするには-Dオプションを用います。
