MySQL

MySQLを使い始めて戸惑った事

wordpressの投稿一覧をSQLで出力したいと思いはじめたのがきっかけで、今更ながらMySQLを使ってみました。普段OracleやPostgreSQLを使っているのですがいろいろ戸惑った事があったのでこちらまとめてみました。

スキーマとデータベースの位置づけが同じです。

MySQLはPostgreSQLと同様に複数のデータベースを保持する事ができます(create databaseができる)がSQLを実行する際には「スキーマ」の位置づけとなります。たしかに「スキーマとは名前空間」なので整合性合いますよね。マニュアルにもありましたが、以下でも確認できます。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| soodb              |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> select schema_name as `Database` from information_schema.schemata;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| soodb              |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql>

ユーザIDだけではユーザの特定ができない

‘ユーザ名’@’host名’ にて「ユーザID」となります。host名にはワイルドカードが使えます。

DBのキャラクターセットと照合順序の異なるDBを簡単に作成可能

オブジェクト名をダブルクォーテーションで囲む事ができない

「囲む事ができない」と書くと語弊ありますが、MySQLでは「逆引用符」(バッククォート U+0060 )で囲みます(キーボードのshift+@)。OracleやPostgreSQLが大文字小文字混在のオブジェクト名を指定する場合はダブルクォーテーションで囲む事に対し、MySQLでは不要です。
例えばMySQLの場合 create table Ex01 と大文字小文字混在でテーブルを作成してもそのまま作成できます。(OracleではEX01,PostgreSQLではex01で作成されます。)OracleやPostgreSQLで「Ex01」という名前のテーブルを作成したい場合 create table “Ex01″ とダブルクォーテーションで囲む必要があります。MySQLで逆引用符で囲む理由は「予約語」をそのままテーブル名や、カラム名に使いたい場合の対策です。例えば create table order とした場合「order」が予約語なのでエラーになりますが逆引用符で囲むとそのまま使えます。(OracleやPostgreSQLも「order」は予約語ですがダブルクォーテーションで囲むと使える点は同じです)

スポンサーリンク