みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

UPDATE 2回の整合性

MySQL 3.23.38 on Redhatです。
PHP4.2から、mysql_queryでsqlを送っています。

同じテーブルに、UPDATEを2回連続で行うと、
2回目で「0」を返して、整合性が取れません。

UPDATE table_name SET Note = REPLACE(Note,'<NEW>','') WHERE id = 1

UPDATE table_name SET Note = CONCAT(Note,'<NEW>') WHERE id = 1

見たいな感じです。
どうも2回目のUPDATEのCONCATの中のNoteが、「0」を返しています。

テーブルをロックしても、問題が解決されませんでした。

なにか良い方法があれば、教えてください。

投稿日時 - 2003-09-17 17:46:22

QNo.657414

困ってます

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

根本的な解決方法ではなく、MySQLが関数のネストを許しているかも知りませんが、
UPDATE table_name
SET Note = CONCAT(REPLACE(Note,'<NEW>',''), '<NEW>')
WHERE id = 1
でこきたなく回避するのはどうでしょう?

ところで2度目のSQL文をなげているときコネクションが
有効どうか試してみました?replceの後に mysql_query("select Note from table_name where ID = 1" ) or die ("失敗");で試してみください。
参考にならなそうな意見で申し訳ないです。

投稿日時 - 2003-09-18 11:57:41

補足

何回もやってみると、
はじめは、うまくいってなかったのですが、
だんだん成功率が増えて、
今では、ほぼ100%成功します。

telnet+mysqlでも接続しながら、
PHPから接続したのが悪いのでしょうか?

負荷の関係で、うまくいかないようでは、
このやり方は、まずいですね。

投稿日時 - 2003-09-18 16:22:09

お礼

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

質問が悪かったです。
実際の動作では、はじめの方にWHEREが無く、
2回目で、必要な部分だけ、WHEREで指定するという感じで、指摘していただいた方法は、使えません。

それから、念のため、 or dieを使って見ましたが、
失敗しませんでした。

投稿日時 - 2003-09-18 16:21:50

あなたにオススメの質問