SQL予約語をDB別に確認する
キーワードを検索し、対象DBでの予約状態、用途、意味、引用例を確認します。
SQL予約語・キーワード一覧を開く結論:短い一般名はDB別に検索してから採用する
order、group、user、keyを一律に利用可・不可とは扱わず、対象DBの分類を確認します。新規設計ではdisplay_order、user_group、user_account、record_key等の具体名を検討します。
複合名でも将来の予約語追加を完全に防げるわけではありません。
Keywordと同名のIdentifier例
CREATE TABLE sample (
order INTEGER,
group VARCHAR(30),
user VARCHAR(50),
key VARCHAR(50)
);
ParserはIdentifierをSQL文法上のKeywordとして読む場合があります。
4語を同じ扱いにしない
語ごと・DBごとに分類を比較します。
| 確認対象 | 確認内容 | 判断 |
|---|---|---|
| order/group | 構文Keyword | Renameを優先 |
| user | DB・Context差 | 対象DBで確認 |
| key | MySQL等の扱い | Versionも確認 |
命名を具体化する
- orderはdisplay_orderやsort_orderへ変更します。
- groupはuser_groupやpermission_groupへ変更します。
- userはuser_account、keyはexternal_key等へ具体化します。
一覧を使って衝突を切り分ける手順
- エラー位置の前後からTable名、Column名、Alias等のIdentifierを抜き出します。
- 利用中のDBを選び、対象語を検索して予約状態と引用例を確認します。
- DB間比較で移行元・移行先の分類を並べます。
- 新規Schemaは用途が分かる名前へRenameし、既存SchemaはQuoteと影響範囲を比較します。
- 実DBでDDL・Query・ORM生成SQLを実行し、対象Versionで確認します。
予約語・キーワード・対象外を分けて読む
| 表示 | 意味 | 識別子としての判断 |
|---|---|---|
| 予約語 | SQL文法で特別な意味が予約されている | 引用なしでは避け、Renameを優先候補にする |
| 文脈依存 | 構文上の位置により特別な意味になる | 利用Contextと生成SQLを確認する |
| 非予約キーワード | キーワードだが通常は識別子にも使える | 将来のVersion差と移植性へ注意する |
| 対象外 | 収録DBではキーワードとして扱わない比較結果 | 将来も安全という保証ではない |
「キーワードだから使用禁止」「一覧にないから絶対安全」とは判断しません。予約状態、利用Context、Version、移行先DBを分けて確認します。
Identifier Quoteと文字列のQuoteを混同しない
| DB | Identifier例 | 補足 |
|---|---|---|
| MySQL | `order` | ANSI_QUOTES有効時はダブルクォートの意味が変わる |
| PostgreSQL | "order" | Quoted Identifierは大小文字を保持する |
| SQL Server | [order] | ダブルクォートはQUOTED_IDENTIFIER設定も確認する |
| Oracle | "order" | Quoted Identifierの大小文字と常時Quoteを考慮する |
SELECT "display_order" FROM "purchase_order";
-- 'display_order' は文字列Literalであり、Identifier Quoteではない
Quoteは既存Schemaの暫定・互換対応として有効ですが、可読性、ORM設定、大小文字、DB移行の負担が残ります。新規設計では意味が明確な非予約語へRenameする方法を先に検討します。
現在のSQL予約語・キーワード一覧で確認できること
| 項目 | 現在の対応 | 境界・注意点 |
|---|---|---|
| DB・Version | SQL:2023、Oracle 21c、PostgreSQL 18、MySQL 8.0、SQL Server 2025 (17.x)、SQLite 3.x | 任意Versionの切替やVersion差分表示は未対応 |
| 検索 | 語・意味・分類の部分一致、大文字小文字を区別しない検索 | 完全一致専用切替、正規表現、Schema一括走査は未対応 |
| 分類 | 予約語、文脈依存、非予約キーワード、対象外 | PostgreSQL公式表の全Context分類を完全再現するものではない |
| 比較 | 1語を選び、2つのDBの分類と引用例を比較 | 全DB Matrix、追加・削除・予約化の履歴比較は未対応 |
| 識別子 | 1件の名前を確認し、DB固有の引用例をCopy | DDL解析、ORM SQL解析、Rename実行は行わない |
| Privacy | 検索・識別子確認はブラウザ内で処理 | 入力DDLやSchemaを保存・送信する機能はない |
一覧は確認の入口です。実際に利用するDBのEdition、Version、SQL Mode、Session設定に対応する公式資料と検証環境でも最終確認してください。
関連ツールと一次資料
- SQL Formatterで構文とTokenを確認
- SQL DB ViewerでSQLite Schemaを確認
- SQLマスキングツールで共有前に機密情報を置換
- テキスト差分比較でUpgrade前後を比較
- MySQL 8.0 Reference Manual: Keywords and Reserved Words
- PostgreSQL 18: SQL Key Words
- Microsoft Learn: Reserved Keywords (Transact-SQL)
- Oracle Database 21c: Reserved Words and Keywords
- SQLite: SQL Keywords
予約語Dataは2026-08-03に上記Versionの公式資料を基準として確認しています。DB更新後は新しい公式一覧を優先してください。
汎用名を業務上の意味へ置き換える
名前だけで用途が分かるとSQL Reviewもしやすくなります。
変更後はDDLだけでなく、実際のQuery、ORM生成SQL、移行先DBでも同じ名前が正しく扱われるか確認します。
- 候補語を一覧検索
- 移行対象DBでも比較
- Rename候補を作る
- MigrationをTest
予約語回避だけでなく意味の明確さも評価します。
よくある質問
- 一覧にない単語なら安全ですか?
- 保証できません。Version、拡張、文脈依存語、将来追加される予約語を考慮し、公式資料と実DBでも確認します。
- Quoteすれば必ず解決しますか?
- 構文上利用できても、大小文字、ORM、移行、保守の問題が残ります。新規設計ではRenameを優先候補にします。
- Schemaを一括検査できますか?
- 現行ツールは1語ずつ検索・比較する一覧です。DDLやSchemaの自動走査機能はありません。