
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で質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
-
sqlserverで集計結果をUPDATEし...
-
sqlserverで同一キー単位で金額...
-
アクセス 日付抽出(年月のみ)...
-
「マスタ」と「テーブル」の違...
-
ACCESS2007 フォーム 「バリア...
-
Access カレントレコードがあり...
-
ストアドをまたがるローカル一...
-
SELECT時の行ロックの必要性に...
-
SELECT文でのデッドロックに対...
-
Access VBA Me.Requery レコー...
-
DB INSERT 時の排他制御について
-
SQL Server のデータをCSVファ...
-
既に使用されているので、使用...
-
請求と入金のテーブルの作成の...
-
Access VBA [リモートサーバー...
-
SQLで○○の値以外を持っているレ...
-
mysql IN句に1データだけ指定...
-
クエリのキャンセルがいつにな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
-
sqlserverで集計結果をUPDATEし...
-
アクセス 日付抽出(年月のみ)...
-
違いを教えてください
-
更新クエリでキー違反
-
sqlserverでUPDATEできません
-
sqlserverで同一キー単位で金額...
-
MAX値を条件にデータを取得する...
-
sqlplusでバックスペースが効か...
-
プライマリーキーで同じ値をUPD...
-
Access2000へのインポートエラー
-
sqlserverで対象のレコードを削...
-
片方のテーブルにないデータを...
-
ACCESSで複数テーブルを結合し...
-
シャープレジスター エラーコード
-
Access 2010動きが遅い
-
accessでのリンクテーブルの更新
-
IDが重複した場合、その他のデ...
-
AccessのSQLで、FROM句の構文エ...
おすすめ情報