2015年9月14日 星期一

運用MySQL的Trigger 來設計鎖單功能

一個商業上資料表單,經常應該經過審核過後,即會希望把單據鎖定,不再被修改或刪除。例如:訂單、進貨單、出貨單、請假單......
如果經過Approve過的單據,還可以隨意被修改,那不是很糟糕嗎!

如此的商業邏輯 Business Rule,應該由MySQL 來做就好,以輕鬆維持資料庫的完整性。
運用 MySQL的 Trigger 就可以輕鬆的做到。

方法是:在該表單的欄位裡面,增加一個 lock bit(1)的欄位。

然後,建立一個 Trigger BEFORE_UPDATE:

BEGIN
IF OLD.lock THEN
    SET NEW = 'ERROR: 本單已經鎖定,無法更改。如欲更改,請先解除鎖定狀態。';
END IF;
END

BEFORE_DELETE:
BEGIN
IF OLD.lock THEN
    SET NEW = 'ERROR: 本單已經鎖定,無法刪除。如欲刪除,請先解除鎖定狀態。';
END IF;
END

這樣就ok了!

沒有留言:

張貼留言

如何判斷現在FORM是在 insert mode? 還是 update mode?

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。