2014-01-24 89 views
1

我有一個鏈接到數據庫的網站。當用戶登錄時,他們有能力刪除稱爲類別的東西。該網站創建一個準備好的聲明並從數據庫中刪除該類別。防止刪除數據庫中的特定行

我希望能夠防止刪除具有特定名稱或ID的類別。這很簡單,可以使用jquery進行檢查,但是我想通過在數據庫中添加一個檢查來添加另一層安全性。幾個問題...

觸發器或程序?我從來沒有使用過程,並且從觸發器的觸發經驗來看,我不知道如何解決這個問題。假設可以使用觸發器,我將如何獲得被刪除的類別?然後,我將如何去停止刪除數據庫中的那一行?

作爲一個開始,我有下面的觸發器代碼。

delimiter $$ 
    CREATE TRIGGER category_delete BEFORE DELETE ON categories 
     FOR EACH ROW 
      BEGIN 

      END$$ 
delimiter ; 

回答

6

從觸發器中拋出一個異常中止刪除:

delimiter $$ 
CREATE TRIGGER category_delete BEFORE DELETE ON categories 
FOR EACH ROW 
BEGIN 
    IF old.id = 5 THEN -- use whatever condition you need 
     SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'May not delete id 5'; 
    END IF; 
END$$ 
delimiter ; 
0

只需添加一個觸發器並對其進行綁定即可。

使用數據庫的力量來維護業務邏輯並保持一致,並且需要什麼 - 儘管PHP,JQuery等都在使用它。它是企業的首要主張

+3

這是正確的是非答案的邊界,可能不是一個答案。什麼觸發器?究竟?代碼在哪裏?這基本上是一個評論。 – Bohemian

+0

@波希米亞 - 這是我能想出問題中的細節的最佳答案。你知道什麼類型的類別和避免。數據庫是公司最重要和最昂貴的斷言之一,也是有點評論。 –

+0

我也曾這麼想過。我甚至使用存儲過程編寫了一個生產系統。現在我知道更好。 *數據*很重要。 *數據庫*幾乎無關緊要。閱讀[this](http://stackoverflow.com/questions/8516088/when-to-use-a-stored-procedure-mysql/8516334#8516334)並將其擴展到所有數據庫「功能」,除了那些支持[ACID ](http://en.wikipedia.org/wiki/ACID)。真正的資產甚至不是應用程序代碼,而是真正的測試。其他一切只是一個實現選擇。 – Bohemian