一旦在特定表中输入了一条记录,我想我永远不会希望它被删除。这些记录的存在是为了记录历史上的事情。我用的是MySQL,InnoDB。有什么方法可以防止应用层意外删除该表吗?如果是这样的话,这是一个好的方法吗?
发布于 2011-11-04 21:23:14
另一种选择是切换到历史表的ARCHIVE引擎。
这将防止对表执行任何删除或更新操作,并压缩数据。这种方法的一个(主要)缺点是您不能索引表上的列。
发布于 2011-11-04 21:12:10
如果您可以为您的用户设置权限,请不要授予删除权限。在某些情况下,这种做法是“必须的”,就像用于统计目的的表一样。因此,如果您的表用于实现其中一个目标,那么这是一种很好的方法。
发布于 2017-06-27 21:25:48
我使用一个触发器来检测删除,并做一些非法的事情,所以整个操作失败。例如:
CREATE TRIGGER protect_delete before delete ON protected_table
FOR EACH ROW UPDATE non_existing_table SET non_existing_column=1;
因此,当有人尝试delete操作时,整个语句将失败。您还可以为non_existing_column和non_existing_table使用更好的名称。
例如,可以获得如下错误消息:
错误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/
https://stackoverflow.com/questions/8015762
复制相似问题