![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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);
No.1ベストアンサー
- 回答日時:
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するのが賢明。
ご回答ありがとうございます。
ということは、ユニークキー以外を更新ということは、
insertもできない理由になってないですよね?
というか、レコードを新規作成や更新できる処理だと
思っていたので、
あらかじめ、更新するにせよ、新規作成するにせよ、
ユニークキー項目も指定しないといけないです。
これは、どこのサイトの見本をみても、
ユニークキーも、valuesの中にはいっているので明確ですし、
そうしないと、いつまでたっても、
目的のレコードに一致した検索キーでレコードにできないので、
更新どころか、新規レコードさえできなくなってしまうと判断します。
といいつつ初めて使うので、
実は、新規レコードは、作れないよ!!とかご指摘がありそうですね。
No.2
- 回答日時:
>ということは、ユニークキー以外を更新ということは、
>insertもできない理由になってないですよね?
いや、だから1行目に回答してるでしょ?
カンマがないから文法エラーになってます
だから、そこにふれてないのは、そんなのは、コンパイル時にエラーになるので、わかるって。
ここに例を書くときに、書きもれたってことぐらい、すぐに想像がつくでしょ?普通の人なら。
だから、触れてないんですよ。くどいよ。回答になってない、返信は、やめてください。いたずらになります。
質問へは、回答を書くようにしてください。
質問へ、ただの返信や、指摘を書いているのでは、解決に結び使い無いので、お互い及び、万一、これを参考にしようと、読みに来ている人達にとっても、たんなる、時間の浪費。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- Windows 10 BitLocker 回復キーの入力 1 2022/10/09 15:23
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- PostgreSQL SQLでUPSERTを一度に複数行やる方法 3 2022/03/25 15:17
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
-
AccessのSQLで、FROM句の構文エ...
-
アクセス 日付抽出(年月のみ)...
-
sqlserverで集計結果をUPDATEし...
-
Access2007で、5つのテーブル...
-
MySQLのON DUPLICATE KEY UP
-
「マスタ」と「テーブル」の違...
-
主キーにインデックスは貼らな...
-
[ BETWEEN ] vs [ >= AND <= ]
-
Accessにインポートしたら並び...
-
データの二重表示の原因
-
ACCESS 一番最新の日付の金額...
-
SELECT文でのデッドロックに対...
-
Accessでクエリを完了できませ...
-
2つの項目が重複するレコード...
-
ACCESSのBookmarkプロパティの...
-
エクセルでテーブルの最終行が...
-
SI Object Browserのテーブルス...
-
MS-SQLプロシージャでファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
sqlserverで集計結果をUPDATEし...
-
オラクルではできるのにSQLSERV...
-
アクセス 日付抽出(年月のみ)...
-
違いを教えてください
-
更新クエリでキー違反
-
MAX値を条件にデータを取得する...
-
AccessのSQLで、FROM句の構文エ...
-
プライマリーキーで同じ値をUPD...
-
シャープレジスター エラーコード
-
sqlplusでバックスペースが効か...
-
ACCESSで複数テーブルを結合し...
-
F1キーを押すの 英訳
-
sqlserverで同一キー単位で金額...
-
sqlserverで対象のレコードを削...
-
アクセスで複数テーブルの選択
-
Access 2010動きが遅い
-
AccessテーブルでのF6キーにつ...
-
DB構成<キーの考え方>
-
accessでのリンクテーブルの更新
おすすめ情報