1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめに

MySQLでテーブルを作成する際に、誤って識別子に予約語を使用してしまったため、構文エラーが発生するという体験をした。
そこで、同じミスを繰り返さないために、MySQLにおける識別子と予約語について知識を整理することにした。

識別子とは?

MySQLでは、データベースオブジェクト(データベースやテーブル、カラム)に付ける名前のことを識別子と呼ぶ。

識別子には以下のルールがある。

  1. アルファベット(大文字または小文字)、数字、アンダースコア(_)から構成する。
  2. 数字から始めることはできない。始める文字はアルファベットまたはアンダースコア(_)でなければならない。
  3. 大文字と小文字を区別する。つまり、MyTablemytableは異なる識別子と見なされる
  4. 最大長は64文字。ただし、実際には使用するデータベースエンジンや設定により異なる場合がある。
  5. 識別子がMySQLの予約語と一致する場合は、その名前を使用できない。ただし、予約語をバッククォート(`)で囲むことによって、識別子として使用できる。 ※詳細については後述。

予約語とは?

予約語は、MySQLが特定の機能や操作を実行するために予め定義しているキーワードである。これらのキーワードはSQL文の構造や動作を定義し、通常、ユーザーがデータベースオブジェクト(データベースやテーブル、カラム)の名前に使用することはできない。予約語はSQLの標準的な構造を維持し、クエリを正しく解釈するために使用される。

予約語は、最新のMySQL公式ドキュメントから確認するのがお勧めである。
※将来のバージョンで新しい予約語が導入される可能性があるため。
https://dev.mysql.com/doc/refman/8.0/ja/keywords.html

予約語を識別子として使用する場合

予約語をテーブルやカラムなどの識別子として使用する場合、バッククォート(`)で囲む必要がある。例えば、以下のように使用する。

sql
-- 予約語を識別子として使用する例
CREATE TABLE `select` (
  `from` INT,
  `where` VARCHAR(255)
);

上記例では、予約語selectをテーブルの識別子として使用し、
予約語fromwhereをカラムの識別子として使用している。

まとめ

MySQLでは、予約語を識別子として使用すると構文エラーが発生するが、識別子をバッククォートで囲むことによって、この問題を回避できる。

ただし、予約語はMySQLが特定の目的で予め定義しているキーワードであり、識別子として使用する場合は慎重に扱う必要がある。

個人的には、全ての予約語を覚える必要性は感じない(というかできない)が、一度最新のMySQL公式ドキュメントの予約語一覧に目を通し、雰囲気を大雑把にでも掴んでおくのが良いと感じた。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?