[前][次][番号順一覧][スレッド一覧]

mysql:5495

From: "Takeo Shibata" <"Takeo Shibata" <shibata@xxxxxxxxxx>>
Date: Mon, 13 May 2002 17:03:53 -0700
Subject: [mysql 05495] LOCK TABLE の使用およびそのた SQL の実行保証にかんして

いつもお世話になってます
関連する2つのテーブルを同時に更新をかけ
どのような状態においても
かならず2つのテーブルが同時にアップされる必要があります
1つが何らかの理由により失敗すればもういつの更新もキャンセル
しなければなりません

このhttp://www.mysql.gr.jp/
の1.4.6 COMMIT/ROLLBACK なしでうまくやる方法
で
いまいろいろ資料みて
LOCK TABLEという記述と
1回のオペレーション中でレコードを更新する関数
という記述がありました

実際は
connect_db
SQL1 = insert into customer(id, passwd, user, ....) values(xx,yy,zz)
SQL2 = insert into login(id, passwd, host) values(xx,yy,$REMOTE_HOST)
LOCK TABLES customer WRITE, login WRITE 
execute(SQL1),
execute(SQL2)
UNLOCK TABLES

とやりたいのですが
まあ用は
execute(SQL1)
でここで失敗すればすべてのアクションを取り消せばいいのですが
execute(SQL1)が成功して
execute(SQL2)が失敗した場合、再度試行するか、
SQL1をキャンセルしたいのですが

通常SQL1,SQL2両方成功させ、最悪でも
両方実行していない状態をできるだけ保証したいのですが
なにかSQLでスマートなやりかたありますでしょうか?

2つ以上の更新、追加SQL
クエリーを実行するときで最初のクエリーが成功し、その
次のクエリーが失敗したら、最初のクエリー実行をキャンセルして
から最試行するなりエラー表示するようにしたいのですが。。

なにかDBに関しては基本的なことかも
しれませんどうかよろしくお願いいたします
こういうときはROLLBACK
んあてのを使用するべきなんでしょうか?
なにかいい方法や解決方法に関する具体的な例SQLがあるサイト
ご存知でしたらどうかご教授ください
よろしくお願いいたします




[前][次][番号順一覧][スレッド一覧]

->    5495 2002-05-14 09:03 ["Takeo Shibata" <shi] LOCK TABLE の使用およびそのた SQL の実行保証にかんして
      5501 2002-05-14 23:07 ┗[とみたまさひろ <tomm]