2011-10-24 294 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

这取决于你想要达到什么..

如果你永远不会再需要该行一旦其被删除了,那么你应该将其删除 - 更新状态栏并没有真正做非常适合你。从性能上看,如果你物理删除该行(当然取决于你的数据库的实际结构)可能会更好。

如果您确实需要在记录被删除后保留它,那么您可以创建一个存档表,您可以将该记录的副本写入到从主表中删除的位置。副本将通过上删除触发器写..

无论哪种方式,你总能做出数据库调用,要么删除记录,或更新状态,删除..