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

时间:2013-07-31 21:49:55

标签: mysql primary-key

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

或者我是否需要在每个表中手动检查更新触发器?

2 个答案:

答案 0 :(得分:5)

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

REVOKE UPDATE (primary_key_col) ON db.tbl FROM 'user'@'localhost'

答案 1 :(得分:2)

没有。使用全局,服务器,会话等等,不可能禁止更新属于“主键”约束的列。变量

如果要阻止UPDATE语句进行更改,可以尝试在每个表上使用BEFORE 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;