?
本文檔使用
php中文網(wǎng)手冊 發(fā)布
如果在觸發(fā)器函數(shù)里執(zhí)行 SQL 命令,并且這些命令訪問觸發(fā)器所在的表,那么你必須知道觸發(fā)器的可視性規(guī)則, 因為這些規(guī)則決定這些 SQL 命令是否能看到觸發(fā)觸發(fā)器的數(shù)據(jù)改變。簡單說:
語句級別的觸發(fā)器遵循簡單的可視性原則:在語句之前(before)觸發(fā)的觸發(fā)器看不到語句所做的修改, 而所有修改都可以被語句之后(after)觸發(fā)的觸發(fā)器看到。
導致觸發(fā)器觸發(fā)的數(shù)據(jù)改變(插入、更新、刪除)通常是不能被 一個 before 觸發(fā)器里面執(zhí)行的 SQL 命令看到的,因為它還沒有發(fā)生
不過,在 before 觸發(fā)器里執(zhí)行的 SQL 命令將能夠看到在同一個外層命令前面處理的行的改變。 這一點需要仔細,因為這些改變的順序通常是不可預期的; 一個影響多行的 SQL 命令可能以任意順序訪問這些行。
在一個行級after觸發(fā)器被觸發(fā)的時候,所有外層命令產(chǎn)生的數(shù)據(jù)改變都已經(jīng)完成,可以被所執(zhí)行的 SQL 命令看到。
如果是用任何一種標準過程語言寫的觸發(fā)器函數(shù),那么只有當函數(shù)聲明了VOLATILE才會應用 上面的語句。聲明了STABLE或IMMUTABLE的函數(shù)在任何情況下都不會看到 請求中做出的改變。
有關數(shù)據(jù)可視性規(guī)則的更多信息可以在Section 43.4找到。 Section 36.4里的例子包含這些規(guī)則的演示