Dml
是否可以驗證 DML 語句?
假設我想從數據庫中刪除一個名為“abc cba”的使用者。所以我執行以下查詢:
DELETE FROM table WHERE fname = 'abc' AND last name = 'cba'; commit;
現在,可以有更多使用此名稱的使用者,我不知道。顯而易見的選擇是預先執行 select 語句並檢查我是否正在刪除我真正想要刪除的內容,但我仍然是人類,我可以忘記這一點並最終搜尋備份以檢索失去的數據。
我的問題是:有沒有辦法對語句施加某些規則,之後它們將不會執行 DML 語句(例如,如果刪除的行數超過某個門檻值,則不執行刪除)?
在數據庫級別上實施這樣的規則在資源方面可能非常昂貴,所以我認為沒有一種標準的方法可以在任何地方工作。
我沒有什麼比在觸發器體內
BEFORE DELETE
引發錯誤更好的建議了(或者AFTER DELETE
,BEFORE
在這種情況下,觸發器似乎更合適)。不幸的是,它非常依賴於 RDMS。例如,在Oracle中,如果要在觸發器中訪問同一張表,則需要使用語句級觸發器;SQLServer 呼叫此類觸發器INSTEAD OF
,而不是BEFORE
。