FAQ
 

■対象バージョン :SQL Anywhere (Adaptive Server Anywhere) version 9.0.x

■対象OS    : すべて

QUESTION(SQ1010100)

BEFORE INSERTトリガの挙動がBEFORE UPDATEトリガやBEFORE DELETEトリガと異なります。
("テーブルA"のBEFOREトリガ(INSERT、UPDATE、DELETE)で、"テーブルB"の操作を行っています。このとき"テーブルA"のINSERTではデッドロックが起こりますが、UPDATEやDELETEではデッドロックが起こりません。)

ANSWER

"テーブルA"へ操作を加える前に、"テーブルA"に対するテーブルロック(LOCK TABLE文)を行っている場合、ご質問のような現象が起こる場合がございます。

上記現象が起こるのは、SQL Anywhere 9.0.xでは、技術的な制約(製品仕様)により、以下のように、BEFORE INSERTトリガと、BEFORE UPDATE/DELETEトリガの発生タイミングが異なる為です。

BEFORE INSERTトリガの発生タイミング:
1:トリガの発生
2:対象ローの排他ロック

BEFORE UPDATE/DELETEトリガの発生タイミング:
1:対象ローの排他ロック
2:トリガの発生

なお、SQL Anywhere 10.0.x以降のバージョンでは、UPDATEトリガとDELETEトリガの仕様が変更され、INSERTトリガと同様のタイミングで発生するようになりましたので、挙動の違いはございません。


BACK:FAQ トップページ
 
 
Copyright 2008-2010 iAnywhere Solutions K.K.