スキーマオブジェクトには、データベース、テーブル、インデックス、列、エイリアス、ビュー、ストアドプロシージャ、パーティション、テーブルスペースなどが含まれ、これらは総称して識別子と呼ばれます。
識別子の参照
識別子の引用符文字はバッククォート(`)であり、識別子は引用符を付けることも、付けないこともできます。識別子に特殊文字や予約語が含まれる場合は、参照する際には必ず引用符を付ける必要があります。
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つのテーブルに共通して存在する列名のみを限定する必要があります。