2017-01-13 4 views
0

私はストアドプロシージャを使用し、mysql v5.1で自動コミットONを使用します。ストアドプロシージャの失敗時にテーブルをロックするのはなぜですか?

UPDATE client 
SET `status` = '0', withdraw_date = NOW() 
WHERE auth_token = p_auth_token; 

UPDATE order 
SET modate = NOW() 
WHERE client_auth_token = p_auth_token AND `status` = '0'; 
//raise error no column client_auth_token 

COMMIT; 

client_auth_tokenが注文表に存在しないため、ストアドプロシージャを呼び出すときにエラーが発生します。ちなみに、レコードをクライアントテーブルにロックしてください。なぜクライアントテーブルの順序テーブルにロックを取る?

答えて

0

問題は予約語orderに関連していると思います。 the list of reserved words in mysql 5.1を参照してください。 statusのように、引用符をorderにする必要があります。ドキュメントごと:

キーワードと予約語は、表名や列名などの識別子として使用するために特別な処理が必要です。

UPDATE `order` 
SET modate = NOW() 
WHERE client_auth_token = p_auth_token AND `status` = '0'; 
関連する問題