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