SQLエラーコードって何?

SQLエラーコードとは、データベース操作中に問題が発生した時に表示される「エラー番号」のことです。
データベースにSQL文を実行した時、何か問題があると「エラー1064」「エラー2003」のような数字と一緒にエラーメッセージが表示されます。この数字がエラーコードで、どんな問題が起きたのかを示す重要な手がかりなんです。
医者が病気を診断する時に症状を見るように、エンジニアはエラーコードを見て問題を特定します。
データベースごとにエラーコードが違う
注意したいのは、使っているデータベース管理システムによってエラーコードの番号体系が異なるということです。
主なデータベースシステム:
- MySQL / MariaDB
- PostgreSQL
- Oracle Database
- Microsoft SQL Server
- SQLite
同じ「テーブルが見つからない」というエラーでも、MySQLでは「1146」、PostgreSQLでは「42P01」というように、異なるコードが使われています。
この記事では、特に利用者が多いMySQLを中心に、よく遭遇するエラーコードを紹介していきますね。
MySQL / MariaDBのよくあるエラーコード
接続関連のエラー
エラー1045:Access denied(アクセス拒否)
ERROR 1045 (28000): Access denied for user 'root'@'localhost'
意味:
ユーザー名やパスワードが間違っているため、データベースに接続できません。
対処法:
- ユーザー名とパスワードを確認する
- 権限設定を見直す
- パスワードをリセットする
エラー2002:Can’t connect to server(サーバーに接続できない)
ERROR 2002 (HY000): Can't connect to local MySQL server
意味:
MySQLサーバーが起動していないか、接続設定が間違っています。
対処法:
- MySQLサーバーが起動しているか確認
- ホスト名やポート番号を確認
- ファイアウォール設定を確認
エラー2003:Can’t connect to MySQL server(接続不可)
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost'
意味:
指定したホストやポートでMySQLサーバーに接続できません。
対処法:
- サーバーのIPアドレスやホスト名を確認
- ポート番号(デフォルトは3306)を確認
- ネットワーク接続を確認
SQL構文エラー
エラー1064:Syntax error(構文エラー)
ERROR 1064 (42000): You have an error in your SQL syntax
意味:
SQL文の書き方が間違っています。SQLの文法ルールに従っていない部分があります。
対処法:
- SQLキーワードのスペルを確認
- カンマやセミコロンの位置を確認
- 予約語をカラム名に使っていないか確認
- バッククォート(`)の使用を検討
エラー1054:Unknown column(不明なカラム)
ERROR 1054 (42S22): Unknown column 'colum_name' in 'field list'
意味:
指定したカラム(列)名がテーブルに存在しません。
対処法:
- カラム名のスペルを確認
- テーブル構造を確認(DESCRIBE文を使用)
- カラム名に大文字小文字の違いがないか確認
エラー1146:Table doesn’t exist(テーブルが存在しない)
ERROR 1146 (42S02): Table 'database.table_name' doesn't exist
意味:
指定したテーブルが見つかりません。
対処法:
- テーブル名のスペルを確認
- データベース名が正しいか確認
- テーブルが作成されているか確認(SHOW TABLES文で確認)
データ操作エラー
エラー1062:Duplicate entry(重複エントリ)
ERROR 1062 (23000): Duplicate entry '123' for key 'PRIMARY'
意味:
主キー(PRIMARY KEY)やユニーク制約(UNIQUE)に設定されているカラムに、すでに存在する値を挿入しようとしています。
対処法:
- 挿入しようとしている値が重複していないか確認
- 主キーの値を変更
- INSERT IGNORE文やON DUPLICATE KEY UPDATE句を使用
エラー1048:Column cannot be null(NULL不可)
ERROR 1048 (23000): Column 'column_name' cannot be null
意味:
NULL(空の値)を許可しないカラムに、NULLを入れようとしています。
対処法:
- 必須カラムに値を指定する
- デフォルト値を設定する
- テーブル定義を見直す(NOT NULL制約の確認)
エラー1452:Foreign key constraint fails(外部キー制約違反)
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails
意味:
外部キー制約によって、参照先のテーブルに存在しない値を挿入・更新しようとしています。
対処法:
- 参照先テーブルに該当する値が存在するか確認
- 外部キー制約の設定を確認
- データの挿入順序を見直す
権限・アクセスエラー
エラー1044:Access denied for database(データベースへのアクセス拒否)
ERROR 1044 (42000): Access denied for user 'username'@'host' to database 'dbname'
意味:
ユーザーが指定したデータベースにアクセスする権限を持っていません。
対処法:
- ユーザーの権限を確認(SHOW GRANTS文)
- 適切な権限を付与(GRANT文)
- データベース管理者に権限付与を依頼
エラー1142:Command denied(コマンド拒否)
ERROR 1142 (42000): SELECT command denied to user
意味:
特定のSQL操作(SELECT、INSERT、UPDATEなど)を実行する権限がありません。
対処法:
- 必要な権限を確認
- 権限を付与してもらう
- 適切なユーザーアカウントで接続
システム関連エラー
エラー1205:Lock wait timeout(ロック待機タイムアウト)
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
意味:
他のトランザクションがテーブルをロックしているため、処理が待機状態となり、タイムアウトしました。
対処法:
- トランザクションを再実行
- ロックしているプロセスを特定して終了
- タイムアウト時間の設定を見直す
エラー1213:Deadlock(デッドロック)
ERROR 1213 (40001): Deadlock found when trying to get lock
意味:
複数のトランザクションがお互いのロック解除を待ち合う「デッドロック」状態が発生しました。
対処法:
- トランザクションを再実行
- テーブルアクセスの順序を統一
- トランザクションを短くする
PostgreSQLのよくあるエラーコード

PostgreSQLでは、5文字のコード体系を使用しています。
42P01:Undefined table(未定義のテーブル)
- MySQLの1146エラーに相当
- テーブルが存在しない
42703:Undefined column(未定義のカラム)
- MySQLの1054エラーに相当
- カラムが存在しない
23505:Unique violation(ユニーク制約違反)
- MySQLの1062エラーに相当
- 重複する値の挿入
23503:Foreign key violation(外部キー制約違反)
- MySQLの1452エラーに相当
- 外部キー制約の違反
SQL Serverのよくあるエラーコード
エラー207:Invalid column name
- カラム名が無効
エラー208:Invalid object name
- テーブルやビューが存在しない
エラー2627:Violation of PRIMARY KEY constraint
- 主キー制約違反
エラー547:Foreign key constraint conflict
- 外部キー制約の競合
エラーメッセージの読み方
エラーメッセージは通常、以下の情報を含んでいます。
基本構造:
ERROR [エラーコード] (SQLステート): エラーメッセージ
実例:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM users' at line 1
読み解くポイント:
- エラーコード(1064):問題の種類を特定
- SQLステート(42000):エラーカテゴリ
- エラーメッセージ:具体的な問題の説明
- near以降:エラーが発生した箇所のヒント
エラー対処の基本ステップ
1. エラーメッセージを全部読む
焦らずに、エラーメッセージ全体をしっかり読みましょう。どこで問題が起きたのか、具体的なヒントが書かれています。
2. エラーコードで検索する
「MySQL エラー1064」のように、データベース名とエラーコードで検索すると、詳しい情報や解決事例が見つかります。
3. SQL文を確認する
エラーメッセージが示す箇所を中心に、SQL文を見直しましょう。
チェックポイント:
- スペルミスはないか
- カンマやセミコロンは正しいか
- 予約語を変数名に使っていないか
- 引用符は正しく閉じているか
4. テーブル構造を確認する
DESCRIBE テーブル名;
または
SHOW COLUMNS FROM テーブル名;
これらのコマンドで、テーブルの構造を確認できます。
5. 権限を確認する
SHOW GRANTS FOR CURRENT_USER();
現在のユーザーの権限を確認しましょう。
トラブルシューティングのコツ
エラーログを活用する
データベースのエラーログには、より詳細な情報が記録されています。
MySQLのエラーログ確認:
SHOW VARIABLES LIKE 'log_error';
クエリを段階的に実行する
複雑なSQL文でエラーが出た時は、部分ごとに分けて実行してみましょう。どこで問題が起きているのか特定しやすくなります。
シンプルな例から始める
最小限のSQL文から始めて、少しずつ複雑にしていく方法も効果的です。
開発環境で試す
本番データベースで試す前に、開発環境やテストデータベースで動作確認しましょう。
まとめ
SQLエラーコードは、データベース操作中の問題を特定するための重要な情報です。
よく遭遇するエラーの種類:
- 接続エラー(1045、2002、2003)
- 構文エラー(1064、1054、1146)
- データ整合性エラー(1062、1048、1452)
- 権限エラー(1044、1142)
- ロック・トランザクションエラー(1205、1213)
エラー対処の基本:
- エラーメッセージを全部読む
- エラーコードで検索する
- SQL文とテーブル構造を確認する
- 段階的にテストする
エラーは誰にでも起こるものです。焦らずにエラーメッセージを読み解き、一つずつ問題を解決していきましょう。エラーコードを理解することで、トラブルシューティングのスピードが格段に上がります。
経験を積むほど、エラーを見ただけで「ああ、あれだな」とわかるようになってきますよ。

コメント