Php 删除时MySQL状态更新触发器
我想听听你对这个问题的看法 我在项目中使用MySQL数据库,在几乎每个表中,我都定义了一个名为Status的列(ENUM('active'、'inactive'、'deleted')) 我这样做是出于性能原因,因此每当不需要(删除)一行时,我就将其设置为“已删除”,而不是从数据库中实际删除它。事实证明,这是相当好的 但是,现在我总是要在我的项目中编写PHP函数,以便将行从活动更新为已删除 您认为,我如何使用MySQL触发器或其他技术解决这个问题Php 删除时MySQL状态更新触发器,php,mysql,codeigniter,activerecord,Php,Mysql,Codeigniter,Activerecord,我想听听你对这个问题的看法 我在项目中使用MySQL数据库,在几乎每个表中,我都定义了一个名为Status的列(ENUM('active'、'inactive'、'deleted')) 我这样做是出于性能原因,因此每当不需要(删除)一行时,我就将其设置为“已删除”,而不是从数据库中实际删除它。事实证明,这是相当好的 但是,现在我总是要在我的项目中编写PHP函数,以便将行从活动更新为已删除 您认为,我如何使用MySQL触发器或其他技术解决这个问题 谢谢你我相信写作之间没有太大区别 DELETE F
谢谢你我相信写作之间没有太大区别
DELETE FROM table WHERE id = 1
或
只要在所有表中使用相同的名称创建相同的字段,我就不需要使用触发器函数。更新行以将其设置为“已删除”有什么不对 毕竟,
UPDATE projects SET status = 'deleted' WHERE id = :id;
vs
没有太大的区别,或者是有区别吗?您必须始终从应用程序代码向数据库发出请求,以实现应用程序用例。这是行的实际DELETE语句,还是将状态设置为“deleted”的UPDATE语句并不重要。你不能通过某种触发来规避这一点。这取决于你试图实现的目标 如果删除该行后,您就不再需要该行了,那么您应该将其删除—更新status列实际上对您没有多大帮助。就性能而言,如果物理删除该行(当然,这取决于数据库的实际结构),可能会更好 如果删除记录后确实需要保留该记录,则可以创建一个存档表,在从主表中删除记录时将记录的副本写入该存档表。副本将由on delete触发器写入
无论哪种方式,您都必须拨打数据库电话,或者删除记录,或者将状态更新为“已删除”。对不起,我无意中编辑了您的答案,而不是我的答案。只是把它滚回去了。很高兴看到,我们的答案几乎相同。因此,我没有注意到:)。
UPDATE projects SET status = 'deleted' WHERE id = :id;
DELETE FROM projects WHERE id = :id;