にほんブログ村
今回はMySQLでSQL文を実行したときに起きるエラーの原因と対処法についてご紹介します。
間違いがあれば教えていただけると嬉しいです!
エラー1:Unknown column “hoge” in ‘field list’
SQL文を実行しようとしたら、
Unknown column “hoge” in ‘field list’
というエラーが出る場合です。
「そんなカラムないよ!」というエラーですね。
原因1 自動変換
MacOSの場合ですが、シングルクォーテーションやダブルクォーテーションを自動変換する大きなお世話機能があります。
元:”
変換後:“
この機能が原因でエラーになっている可能性があります。
うっとうしいようであれば、自動変換を無効にすることもできます。
原因2 カラム名が違う
そもそも指定しているカラム名が違う可能性があります。
正:prefecture_name
誤:prefecturename
のようにカラム名が違うとエラーになります。
タイプミスがないかチェックしてみましょう。
わたしは別のテーブルから取得した値をテーブルにINSERTするときにこのミスをしました。
ちなみに別のテーブルから取得した値をINSERTするときは、指定するカラムの数が違うとエラーになります。
カラムの数は揃えてくださいね。
エラー2:Data truncated for column ‘hoge’ at row XX
このエラーは、別のテーブルから取得した値をテーブルにINSERTするときを想定しています。
SQL文を実行しようとしたら、
Data truncated for column ‘hoge’ at row XX
というエラーが出る場合です。
原因1 カラムの型が違う
これはINSERTするデータのテーブルの型が違うことが原因の可能性があります。
極端な例ですが、
テーブルA:INT(20)
テーブルB:DATE
とか。
原因2 文字数の指定が違う
型は合っているものの、後ろの文字数が違う場合ですね。
テーブルA:VARCHAR(20)
テーブルB:VARCHAR(10)
テーブルAは20なのにテーブルBは20にしているので、エラーになります。
エラー3:UNIQUE constraint failed
UNIQUE constraint failed: {table名} .{カラム名}
このエラーはシステムによっては起きる可能性があるエラーです。
例えば以下のSQLを実行します。
このSQLでは主キー(プライマリーキー)のカラムp_keyの値1と2を入れ替えています。
UPDATE HogeTable
SET p_key = CASE WHEN p_key = '1'
THEN '2'
WHEN p_key = '2'
THEN '1'
ELSE p_key END
WHERE p_key IN ( '1', ' 2' );
これを実行すると、MySQLやPostgreSQLではエラーになります。
原因1 主キーの重複エラー
p_key が ‘1’のとき、’2’に値を変更しようとしています。
そのときまだp_key = ‘2’の値は’1’に変更されずに残っているわけなので、p_keyカラムには’2’が2つあるんですね。
値が重複しているので、このエラーが起きています。
とはいえ、WHEN p_key = '2' THEN '1'
で’2’の値は’1’に変更されるので、一時的に重複しているにすぎません。
なので、Oracleなどではエラーにはならないようです。
この辺システム間で統一しておいて欲しい(切実)
終わりに
SQLを触り始めたばかりの頃って特にエラーの原因がよくわからないですよね…
SQLのエラーについては原因が色々考えられるので、特定が難しいですが、経験値を貯めていけばサクッと解決できそうです!
今のところはこれくらいですが、また遭遇したエラーがあれば追記します!
MySQLを学習するなら、以下の本がおすすめです。
実際に手を動かしながら確認できるので、頭に入りやすいですよ。
「SQLって何?」という基礎の部分からしっかり学べる点も魅力です。
わたしは今でも手元に持ってたまに読み返しています。
プログラミングを真剣に学習したい人は、スクールもおすすめです。
以下の記事では、元講師のわたしが選んだおすすめできるスクールをご紹介しています。
よかったらぜひ読んでみてください!
ではでは〜
にほんブログ村