在特定表格中输入记录后,我想我不希望将其删除。记录用于记录历史目的。我正在使用MySQL,InnoDB。有什么方法可以保护该表不被应用程序层意外删除?如果是这样,这是一个好方法吗?
答案 0 :(得分:3)
如果您可以为用户设置权限,请不要授予删除权限。在某些情况下,这种做法是“必须”的,就像统计用途的表格一样。因此,如果您的表用于实现此目标之一,那么这是一个很好的方法。
答案 1 :(得分:1)
我使用一个检测删除的触发器并执行一些非法操作,因此整个操作失败。例如:
CREATE TRIGGER protect_delete before delete ON protected_table
FOR EACH ROW UPDATE non_existing_table SET non_existing_column=1;
因此当有人尝试删除操作时 - 整个语句将失败。您还可以为non_existing_column和non_existing_table使用更好的名称。
例如,可以获得如下错误消息:
ERROR 1146(42S02):表" database.delete_restricted_on_tableX' 不存在
编辑:也可以创建更好的失败消息,请点击此处http://www.brokenbuild.com/blog/2006/08/15/mysql-triggers-how-do-you-abort-an-insert-update-or-delete-with-a-trigger/
答案 2 :(得分:0)
我认为你应该在你的应用程序层中实现这个逻辑,然后在你输入no-delete标志的位置插入一个列。
另一个想法是排除db用户的删除访问
答案 3 :(得分:0)
您可能想要编写一个检测删除的触发器,然后重新插入记录,但可能存在一些问题,因此您也可以添加一个防止删除的外键约束。
有关此问题的一些讨论,请查看:http://rpbouman.blogspot.com/2011/10/mysql-hacks-preventing-deletion-of.html。
答案 4 :(得分:0)
另一个选择是切换到历史表的ARCHIVE引擎。
这将阻止对表执行任何DELETE或UPDATE操作,并压缩数据。这种方法的一个(主要)缺点是您无法索引表中的列。