首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql -全局禁用主键列的更新

mysql -全局禁用主键列的更新
EN

Stack Overflow用户
提问于 2013-07-31 21:49:54
回答 2查看 1.5K关注 0票数 0

是否可以通过全局会话或服务器变量禁用在全局级别更新主键列的可能性?

还是需要手动检查每个表中的更新触发器?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 22:21:11

不是的。不可能禁止使用全局、服务器、会话等对作为“主键”约束一部分的列进行更新。变量。

如果要阻止UPDATE语句进行更改,可以尝试在每个表上使用“前更新”触发器强制执行该操作。

代码语言:javascript
复制
SET NEW.primary_key_col = OLD.primary_key_col;

后续行动:

dmjm说:“,我宁愿抛出一个错误.”

若要使用MySQL 5.5或更高版本从触发器中引发错误,可以使用新的SIGNAL语法。http://dev.mysql.com/doc/refman/5.5/en/signal.html

使用MySQL 5.1或更高版本,没有直接抛出错误的方法,因此开发人员实现了“坏”代码,执行这些代码可以(实际上)保证抛出错误。

代码语言:javascript
复制
IF ( NEW.primary_key_col <> OLD.primary_key_col ) THEN
  UPDATE `Error: primary_key_col modification not allowed` SET dummy=0 WHERE dummy=-1;
END IF;
票数 3
EN

Stack Overflow用户

发布于 2013-07-31 22:34:52

作为对spencer7593答案的补充,如果您管理您自己的数据库用户,则可以始终使用REVOKE“保护”某些列。

代码语言:javascript
复制
REVOKE UPDATE (primary_key_col) ON db.tbl FROM 'user'@'localhost'
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17981601

复制
相关文章

相似问题

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