我希望看到你对这个问题的看法。
我正在为我的项目使用MySQL数据库,几乎在每个表中,我都有一个名为 Status 的列(ENUM('active','inactive','deleted'))。
我出于性能原因这样做,所以每当不需要(删除)行时,我将其设置为“已删除”,而不是实际从数据库中删除它。这证明相当不错。
但是,现在我总是要在我的项目中编写PHP函数来更新从Active到Deleted的行。
您如何看待,我如何使用MySQL触发器或使用其他技术来解决这个问题?
谢谢
答案 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触发器写入..
无论哪种方式,您都必须进行数据库调用,要么删除记录,要么将状态更新为已删除..