是否可以通过全局会话或服务器变量禁用在全局级别更新主键列的可能性?
还是需要手动检查每个表中的更新触发器?
发布于 2013-07-31 22:21:11
不是的。不可能禁止使用全局、服务器、会话等对作为“主键”约束一部分的列进行更新。变量。
如果要阻止UPDATE语句进行更改,可以尝试在每个表上使用“前更新”触发器强制执行该操作。
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或更高版本,没有直接抛出错误的方法,因此开发人员实现了“坏”代码,执行这些代码可以(实际上)保证抛出错误。
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;发布于 2013-07-31 22:34:52
作为对spencer7593答案的补充,如果您管理您自己的数据库用户,则可以始终使用REVOKE“保护”某些列。
REVOKE UPDATE (primary_key_col) ON db.tbl FROM 'user'@'localhost'https://stackoverflow.com/questions/17981601
复制相似问题