首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL:如何防止删除?

MySQL:如何防止删除?
EN

Stack Overflow用户
提问于 2011-11-05 05:10:32
回答 5查看 5.4K关注 0票数 3

一旦在特定表中输入了一条记录,我想我永远不会希望它被删除。这些记录的存在是为了记录历史上的事情。我用的是MySQL,InnoDB。有什么方法可以防止应用层意外删除该表吗?如果是这样的话,这是一个好的方法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-11-05 05:23:14

另一种选择是切换到历史表的ARCHIVE引擎。

这将防止对表执行任何删除或更新操作,并压缩数据。这种方法的一个(主要)缺点是您不能索引表上的列。

票数 1
EN

Stack Overflow用户

发布于 2011-11-05 05:12:10

如果您可以为您的用户设置权限,请不要授予删除权限。在某些情况下,这种做法是“必须的”,就像用于统计目的的表一样。因此,如果您的表用于实现其中一个目标,那么这是一种很好的方法。

票数 4
EN

Stack Overflow用户

发布于 2017-06-28 05:25:48

我使用一个触发器来检测删除,并做一些非法的事情,所以整个操作失败。例如:

代码语言:javascript
运行
复制
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/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8015762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档