只是好奇地看到你的意见,因为我正在和一个共存的CMS一起开发一个论坛脚本 - 我有ACL等等。
但是想知道是否最好做DELETE FROM
...(如删除记录)...或者只需UPDATE
将列设置为1({{1} }) - 隐藏它(所以它看起来被删除)。
PS:只有我信任的人才能访问审核工具
答案 0 :(得分:3)
这取决于您,通常是您要删除的数据有多重要,或者您希望对事故有多宽容的问题。
我喜欢使用的方法是为您要删除的项目提供克隆数据库。在删除时,将所选行的内容复制到新数据库,然后删除。额外"删除"系统中的文章或项目只是占用更多空间,最终会减慢查询速度。(可能)。
填写完"删除文章"数据库,运行转储,存档,截断。
假设您的数据库CMS上有一个名为ARTICLES的表,您希望存储已删除的帖子,我们将创建一个具有相同表结构的相同数据库:
CREATE DATABASE `deleted`;
CREATE TABLE deleted.cmsarticles LIKE CMS.ARTICLES;
在删除内容的PHP脚本中,您可以执行以下操作:
//GRAB THE ID OF THE ARTICLE YOU ARE DELETING, MAKE SURE TO SANITIZE!
$article_id=$_POST['id'];
if(is_numeric($article_id) {
$dbconnect=databaseFunction();
$result=$dbconnect->query("SELECT `row1`,`row2` FROM `ARTICLES` WHERE `id`=$article_id");
if($result->num_rows!=0) {
$row=$result->fetch_array(MYSQLI_ASSOC);
//Open new connection to deleted database
$dbconnect2=otherDBFunction();
$dbconnect2->query("INSERT INTO `cmsarticles`(row1,row2) VALUES ({$row['row1']},{$row['row2']}");
$dbconnect->query("DELETE FROM `ARTICLES` where `id`={$_POST['id']}");
}
}
答案 1 :(得分:2)
你的直觉是正确的。有时你想要“取消删除”帖子,或者参考已删除帖子的内容。想象一下,如果有人对别人的生命施加了威胁;你想要从视图中删除它,但也希望保留记录,比如,如果事情升级,请与警方分享。
一种常见的方法是将DATETIME列添加到您的表中,例如, deleted_at
。在您“删除”帖子之前,此列将为NULL
,此时它只会获得UPDATE
d当前日期和时间。然后,很容易只显示未删除的记录,例如SELECT ... WHERE deleted_at IS NULL
。
如果性能成为问题(可能不会)或磁盘大小确实存在,那么您偶尔可以删除已删除的帖子,例如:
DELETE FROM posts
WHERE
# DELETE all rows that were "deleted" more than a year ago
COALESCE( deleted_at, NOW() ) < NOW() - INTERVAL 1 YEAR
;