SQLエラーコード一覧|よくあるエラーと解決方法を初心者向けに解説

データベース・SQL
スポンサーリンク

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文とテーブル構造を確認する
  • 段階的にテストする

エラーは誰にでも起こるものです。焦らずにエラーメッセージを読み解き、一つずつ問題を解決していきましょう。エラーコードを理解することで、トラブルシューティングのスピードが格段に上がります。

経験を積むほど、エラーを見ただけで「ああ、あれだな」とわかるようになってきますよ。

コメント

タイトルとURLをコピーしました