Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除时MySQL状态更新触发器_Php_Mysql_Codeigniter_Activerecord - Fatal编程技术网

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

Php 删除时MySQL状态更新触发器,php,mysql,codeigniter,activerecord,Php,Mysql,Codeigniter,Activerecord,我想听听你对这个问题的看法 我在项目中使用MySQL数据库,在几乎每个表中,我都定义了一个名为Status的列(ENUM('active'、'inactive'、'deleted')) 我这样做是出于性能原因,因此每当不需要(删除)一行时,我就将其设置为“已删除”,而不是从数据库中实际删除它。事实证明,这是相当好的 但是,现在我总是要在我的项目中编写PHP函数,以便将行从活动更新为已删除 您认为,我如何使用MySQL触发器或其他技术解决这个问题 谢谢你我相信写作之间没有太大区别 DELETE F

我想听听你对这个问题的看法

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

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

但是,现在我总是要在我的项目中编写PHP函数,以便将行从活动更新为已删除

您认为,我如何使用MySQL触发器或其他技术解决这个问题


谢谢你

我相信写作之间没有太大区别

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;