MySQL
データベースの作成
サーチ…
構文
- CREATE {DATABASE | SCHEMA} [存在しない場合] db_name [create_specification] ///データベースを作成するには
- DROP {DATABASE | SCHEMA} [IF EXISTS] db_name ///データベースを削除するには
パラメーター
パラメータ | 詳細 |
---|---|
CREATE DATABASE | 指定された名前のデータベースを作成します。 |
スキーマの作成 | これはCREATE DATABASE 同義語です |
存在しない場合 | 指定されたデータベースがすでに存在する場合、実行エラーを回避するために使用されます |
create_specification | create_specification オプションは、 CHARACTER SET やCOLLATE (データベース照合)などのデータベース特性を指定します。 |
データベース、ユーザー、および権限の作成
DATABASEを作成します。短縮された語SCHEMAは同義語として使用できることに注意してください。
CREATE DATABASE Baseball; -- creates a database named Baseball
データベースがすでに存在する場合は、エラー1007が戻されます。このエラーを回避するには、次を試してください。
CREATE DATABASE IF NOT EXISTS Baseball;
同様に、
DROP DATABASE IF EXISTS Baseball; -- Drops a database if it exists, avoids Error 1008
DROP DATABASE xyz; -- If xyz does not exist, ERROR 1008 will occur
上記のエラーの可能性のため、DDLステートメントはIF EXISTS
よく使用されます。
デフォルトのCHARACTER SETと照合を使用してデータベースを作成できます。例えば:
CREATE DATABASE Baseball CHARACTER SET utf8 COLLATE utf8_general_ci;
SHOW CREATE DATABASE Baseball;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| Baseball | CREATE DATABASE `Baseball` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+-------------------------------------------------------------------+
あなたの現在のデータベースを参照してください:
SHOW DATABASES;
+---------------------+
| Database |
+---------------------+
| information_schema |
| ajax_stuff |
| Baseball |
+---------------------+
現在アクティブなデータベースを設定し、いくつかの情報を参照してください:
USE Baseball; -- set it as the current database
SELECT @@character_set_database as cset,@@collation_database as col;
+------+-----------------+
| cset | col |
+------+-----------------+
| utf8 | utf8_general_ci |
+------+-----------------+
上記は、データベースのデフォルトの文字セットと照合順序を示しています。
ユーザーを作成する:
CREATE USER 'John123'@'%' IDENTIFIED BY 'OpenSesame';
上記の例では、ユーザーJohn123が作成され、 %
ワイルドカードのために任意のホスト名に接続できます。ユーザーのパスワードは、ハッシュされた 'OpenSesame'に設定されています。
そして別のものを作りなさい:
CREATE USER 'John456'@'%' IDENTIFIED BY 'somePassword';
特別なmysql
データベースを調べてユーザが作成されたことを示します:
SELECT user,host,password from mysql.user where user in ('John123','John456');
+---------+------+-------------------------------------------+
| user | host | password |
+---------+------+-------------------------------------------+
| John123 | % | *E6531C342ED87 .................... |
| John456 | % | *B04E11FAAAE9A .................... |
+---------+------+-------------------------------------------+
この時点で、ユーザーは作成されていますが、Baseballデータベースを使用する権限はありません。
ユーザーとデータベースのアクセス許可を使用して作業します。ユーザーJohn123にBaseballデータベースに対する完全な権限を与え、他のユーザーのSELECT権限のみを付与する権利:
GRANT ALL ON Baseball.* TO 'John123'@'%';
GRANT SELECT ON Baseball.* TO 'John456'@'%';
上記を確認してください:
SHOW GRANTS FOR 'John123'@'%';
+--------------------------------------------------------------------------------------------------------+
| Grants for John123@% |
+--------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'John123'@'%' IDENTIFIED BY PASSWORD '*E6531C342ED87 .................... |
| GRANT ALL PRIVILEGES ON `baseball`.* TO 'John123'@'%' |
+--------------------------------------------------------------------------------------------------------+
SHOW GRANTS FOR 'John456'@'%';
+--------------------------------------------------------------------------------------------------------+
| Grants for John456@% |
+--------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'John456'@'%' IDENTIFIED BY PASSWORD '*B04E11FAAAE9A .................... |
| GRANT SELECT ON `baseball`.* TO 'John456'@'%' |
+--------------------------------------------------------------------------------------------------------+
あなたが常に見ることができるGRANT USAGE
の使用法は、単にユーザーがログインできることを意味することに注意してください。それだけで意味があります。
MyDatabase
あなたは、独自のデータベースを作成し、既存のデータベースのいずれかに書き込みを使用してはいけません。これは、初めて接続した後に行う最初の作業の1つになる可能性が高いです。
CREATE DATABASE my_db;
USE my_db;
CREATE TABLE some_table;
INSERT INTO some_table ...;
データベース名my_db.some_table
することで、テーブルを参照できます。
システムデータベース
MySQLの使用のために以下のデータベースが存在します。それらを読み取る( SELECT
)ことはできますが、その中にテーブルを書き込む( INSERT
/ UPDATE
/ DELETE
)しないでください。 (いくつかの例外があります。)
-
mysql
-GRANT
情報やその他のもののためのリポジトリ。 -
information_schema
- ここでの表は、実際にはメモリ内構造によって明示されているという意味では「仮想」です。その内容には、すべての表のスキーマが含まれます。 -
performance_schema
- ?? [同意してから、編集してください] - 他の? (MariaDB、Galera、TokuDBなど)
データベースの作成と選択
権限を設定する際に管理者がデータベースを作成した場合、そのデータベースを使用することができます。それ以外の場合は、自分で作成する必要があります。
mysql> CREATE DATABASE menagerie;
Unixでは、データベース名は大文字と小文字が区別されます(SQLキーワードとは異なります)ので、データベースをMenagerie、MENAGERIE、またはその他の変種ではなく、常にmenagerieとして参照する必要があります。これはテーブル名にも当てはまります。 (Windowsでは、この制限は適用されませんが、特定のクエリで同じ文字列を使用してデータベースとテーブルを参照する必要がありますが、さまざまな理由により、常に推奨されるベストプラクティスは、データベースが作成されました。)
データベースを作成しても、それを使用するためには選択されません。それを明示的に行う必要があります。 menagerieを現在のデータベースにするには、次のステートメントを使用します。
mysql> USE menagerie
Database changed
データベースは一度作成する必要がありますが、mysqlセッションを開始するたびに使用するように選択する必要があります。この例のようにUSE文を発行すると、これを行うことができます。あるいは、mysqlを呼び出すときにコマンドラインでデータベースを選択することもできます。提供する必要のある接続パラメータの後にその名前を指定するだけです。例えば:
shell> mysql -h host -u user -p menagerie
Enter password: ********