2011-10-24 336 views
0

我想在這個問題上看到您的意見。我有一個名爲狀態(ENUM('active','inactive','deleted'))的列,在我的項目中,並且幾乎在每個表中都有一個名爲刪除MySQL狀態更新觸發器

我這樣做是出於性能原因,所以無論何時不需要一行(刪除),我將它設置爲'已刪除'而不是實際從數據庫中刪除它。這已被證明相當好。

但是,現在我總是必須在我的項目中編寫PHP函數,以便將Active從Active更新爲Deleted。

您認爲如何使用MySQL觸發器或使用其他技術來解決此問題?

謝謝

回答

1

更新行以將其設置爲刪除有什麼不對?

畢竟,

UPDATE projects SET status = 'deleted' WHERE id = :id; 

VS

DELETE FROM projects WHERE id = :id; 

沒有太大的差別還是不對?

1

我相信寫作之間沒有太大的區別;

DELETE FROM table WHERE id = 1 

UPDATE table SET status = 'deleted' WHERE id = 1 

只要你創建的所有表的相同名稱相同的字段,觸發功能似乎並不necessery給我。

+0

對不起,我無意中編輯了你的答案,而不是我的答案。剛把它推回去。很高興看到,我們的答案几乎相同。因此,我沒有注意到:)。 – middus

+0

@middus:沒問題:) –

0

您總是需要從應用程序代碼向您的數據庫發出請求來實現您的應用程序用例。無論這是一行的實際DELETE語句,還是將狀態設置爲「已刪除」的UPDATE語句都無關緊要。你不能用某種觸發來規避這種情況。

0

這取決於你想要達到什麼..

如果你永遠不會再需要該行一旦其被刪除了,那麼你應該將其刪除 - 更新狀態欄並沒有真正做非常適合你。從性能上看,如果你物理刪除該行(當然取決於你的數據庫的實際結構)可能會更好。

如果您確實需要在記錄被刪除後保留它,那麼您可以創建一個存檔表,您可以將該記錄的副本寫入到從主表中刪除的位置。副本將通過上刪除觸發器寫..

無論哪種方式,你總能做出數據庫調用,要麼刪除記錄,或更新狀態,刪除..