删除时的MySQL状态更新触发器

时间:2011-10-24 14:53:49

标签: php mysql codeigniter activerecord

我希望看到你对这个问题的看法。

我正在为我的项目使用MySQL数据库,几乎在每个表中,我都有一个名为 Status 的列(ENUM('active','inactive','deleted'))。

我出于性能原因这样做,所以每当不需要(删除)行时,我将其设置为“已删除”,而不是实际从数据库中删除它。这证明相当不错。

但是,现在我总是要在我的项目中编写PHP函数来更新从Active到Deleted的行。

您如何看待,我如何使用MySQL触发器或使用其他技术来解决这个问题?

谢谢

4 个答案:

答案 0 :(得分:1)

我相信写作之间差别不大;

DELETE FROM table WHERE id = 1

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

只要在所有表格中创建具有相同名称的相同字段,触发功能似乎就不再适用于我。

答案 1 :(得分:1)

更新行以将其设置为已删除有什么问题?

毕竟,

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

VS

DELETE FROM projects WHERE id = :id;

没有太大的区别或是这样吗?

答案 2 :(得分:0)

您始终必须从应用程序代码向数据库发出请求以实现应用程序用例。这是否是行的实际DELETE语句,或者将状态设置为“已删除”的UPDATE语句并不重要。你无法通过某种触发来规避这一点。

答案 3 :(得分:0)

这取决于你想要实现的目标..

如果你删除它后再也不需要该行,那么你应该删除它 - 更新状态列对你来说并没有多大帮助。在性能方面,如果您实际删除行(当然,取决于数据库的实际结构),它可能会更好。

如果确实需要在删除记录后保留记录,那么您可以创建一个归档表,当您从主表中删除记录时,可以将记录副本写入。副本将由on-delete触发器写入..

无论哪种方式,您都必须进行数据库调用,要么删除记录,要么将状态更新为已删除..