スキーマオブジェクトにはデータベース、テーブル、インデックス、列、エイリアス、ビュー、ストアドプロシージャ、パーティション、テーブルスペースなどが含まれ、これらは総称して識別子と呼ばれます。
引用識別子
識別子の引用文字はバッククォート(`)であり、識別子は引用符を付けることも、付けないこともできます。識別子に特殊文字や予約語が含まれる場合は、引用する際には必ず引用符を付ける必要があります。
obclient> SELECT * FROM `table` WHERE `table`.id > 10;
内部では、識別子はUnicode (UTF-8) に変換されて格納されます。識別子には以下の文字を含めることができます:
引用符なしの識別子で許可される文字:
ASCII: [0-9,a-z,A-Z$_] (ASCII: [0-基本的なラテン文字、数字0-9、ドル記号、アンダースコア])
拡張文字:U+0080 .. U+FFFF
引用符付きの識別子で許可される文字は、U+0000 を除く完全なUnicode BMPです:
ASCII: U+0001 .. U+007F
拡張文字:U+0080 .. U+FFFF
引用符の有無にかかわらず、識別子ではASCII NUL (U+0000) および補助文字 (U+10000 以上) の使用は許可されません。
識別子は数字で始めることができますが、引用される場合を除き、数字のみで構成されることはできません。
データベース、テーブル、列名は、スペース文字で終わることはできません。
識別子を引用する場合、識別子の引用文字をその中に含めることができます。識別子内の文字が識別子自体を引用するために使用される文字と同じ場合は、引用を2回繰り返す必要があります。
以下の例のように、a"b という名前のテーブルを作成し、c`d という名前の列を含めることができます:
obclient> CREATE TABLE `a"b` (`c``d` INT);
Query OK, 0 rows affected
ステートメント内の他の箇所でエイリアスを引用する場合は、識別子を使用して引用する必要があります。そうでない場合、文字列リテラルと見なされます。
obclient> SELECT 1 AS `one`, 2 AS 'two';
+-----+-----+
| one | two |
+-----+-----+
| 1 | 2 |
+-----+-----+
1 row in set
識別子の限定子
オブジェクト名は限定されたものまたは非限定された(省略された)ものにすることができます。限定された名前には少なくとも1つの限定子が含まれます。
以下の例のように、非限定名 t1 を使用してテーブルを作成します:
obclient> CREATE TABLE t1 (c INT);
Query OK, 0 rows affected
t1 にはデータベースを指定する限定子が含まれていないため、このステートメントはデフォルトデータベース内にテーブルを作成します。デフォルトデータベースが設定されていない場合、エラーが発生します。
以下の例のように、限定名 ob1.t1 を使用してテーブルを作成します:
obclient> CREATE TABLE ob1.t1 (c INT);
Query OK, 0 rows affected
ob1.t1 にはデータベース限定子 ob1 が含まれているため、このステートメントは ob1 という名前のデータベース内に t1 を作成します。デフォルトデータベースが設定されていない場合、限定子を指定する必要があります。デフォルトデータベースが存在する場合は、限定子を使用して非デフォルトデータベースを指定できます。
限定子には以下の特徴があります:
非限定名は単一の識別子で構成されます。限定名は複数の識別子で構成されます。
識別子と限定子はピリオド (.) 文字で区切られます。
限定子は独立した記号であり、識別子と限定子の間にはスペースを入れることができます。例えば、
tbl_name.col_nameとtbl_name . col_nameは等価です。識別子と限定子が同時に存在する場合、それぞれを個別に参照する必要があります。例えば、
my-table`.`my-columnは正しいですが、```my-table.my-column` `` は間違っています。限定名のピリオド (.) の後の予約語は識別子でなければなりません。
構文
.tbl_nameはデフォルトデータベース内のテーブルtbl_nameを表します。
オブジェクト名で許可される限定子はオブジェクトのタイプによって異なり、ルールは以下のとおりです:
データベース名は完全に限定されており、限定子を持ちません:
CREATE DATABASE obdb1;テーブル、ビュー、またはストアドプログラムの名前にはデータベース限定子を指定できます。
CREATEステートメントにおける非限定名と限定名の例は以下のとおりです:CREATE TABLE mytable ...; CREATE VIEW myview ...; CREATE TABLE obdb.mytable ...; CREATE VIEW obdb.myview ...;列名には複数の限定子を指定できます。以下の表のとおりです。
列参照意味col_nameステートメントで使用される任意のテーブルの col_nameという名前を持つ列。tbl_name.col_nameデフォルトデータベースのテーブル tbl_nameの列col_name。db_name.tbl_name.col_namedb_nameデータベースのtbl_nameテーブルの列col_name。同一ステートメント内で異なるデータベースの同一テーブルから取得するには、テーブルを限定する必要があります。これらのテーブルの列に参照する場合、2つのテーブルに共通して存在する列名のみを限定する必要があります。