電子書籍の厳選無料作品が豊富!

MySQLのON DUPLICATE KEY UPでエラーもでずに、
更新や新規作成もされない。



MySQLで、ON DUPLICATE KEY UPDATE を初めて使っています。
ところが、レコードが更新や作成されなくて困っています。

具体的には、下記のようなSQL文ですが、
どこがわるいのでしょうか?

String strSQL =
"INSERT INTO interview_patient_modoule ("
+ "aaa" ・・・複合キー
+",bbb" ・・・複合キー
+",ccc"
+",ddd"  ・・・複合キー
+",eee"
+ ")"
+ " VALUES ("
+ "1"
+ "2"
+ "3"
+ "4"
+ "5"
+ ")"
+ "ON DUPLICATE KEY UPDATE"
+ "aaa = 1" ・・・複合キー
+",bbb = 2" ・・・複合キー
+",ddd = 3";  ・・・複合キー

// SQLの実行
dbStatement.execute(strSQL);

A 回答 (2件)

VALUESで与えているデータ・・・カンマがついてないので要素数があわない文法エラー



ちなみに「ON DUPLICATE KEY UPDATE」でユニークを担保するキーをいじるのは得策ではない
たとえば・・・

create table interview_patient_modoule(aaa int,bbb int,ccc int,ddd int,eee int,unique(aaa,bbb,ddd));
insert into interview_patient_modoule values(1,2,3,4,5);

として
insert into interview_patient_modoule values(1,2,3,4,5) on duplicate key update aaa=1,bbb=2,ddd=3;
を実行すると元データが「1,2,3,3,5」に変化し
もう一度、上記を繰り返すと「1,2,3,3,5」「1,2,3,4,5」の2つになる
さらにもう一度上記を繰り返すと「1,2,3,4,5」を「1,2,3,3,5」に変更しようとしてすでに「1,2,3,3,5」が
あるため結局はユニークが確保できずにエラーになる

したがって「ON DUPLICATE KEY UPDATE」を使うならユニークキー以外のデータを
updateするのが賢明。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ということは、ユニークキー以外を更新ということは、
insertもできない理由になってないですよね?

というか、レコードを新規作成や更新できる処理だと
思っていたので、
あらかじめ、更新するにせよ、新規作成するにせよ、
ユニークキー項目も指定しないといけないです。

これは、どこのサイトの見本をみても、
ユニークキーも、valuesの中にはいっているので明確ですし、
そうしないと、いつまでたっても、
目的のレコードに一致した検索キーでレコードにできないので、
更新どころか、新規レコードさえできなくなってしまうと判断します。

といいつつ初めて使うので、
実は、新規レコードは、作れないよ!!とかご指摘がありそうですね。

お礼日時:2015/07/13 18:42

>ということは、ユニークキー以外を更新ということは、


>insertもできない理由になってないですよね?

いや、だから1行目に回答してるでしょ?
カンマがないから文法エラーになってます
    • good
    • 0
この回答へのお礼

だから、そこにふれてないのは、そんなのは、コンパイル時にエラーになるので、わかるって。
ここに例を書くときに、書きもれたってことぐらい、すぐに想像がつくでしょ?普通の人なら。
だから、触れてないんですよ。くどいよ。回答になってない、返信は、やめてください。いたずらになります。
質問へは、回答を書くようにしてください。
質問へ、ただの返信や、指摘を書いているのでは、解決に結び使い無いので、お互い及び、万一、これを参考にしようと、読みに来ている人達にとっても、たんなる、時間の浪費。

お礼日時:2015/07/14 08:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!