如何定义一个应该有一列不可更新的mysql表我的意思是一旦插入它就不允许用户以任何方式更新。 例如,名为tbl_xyz的表有3列,其中一列不可更新 tbl_xyz(c1,c2,c3),假设我插入值为(MBX,123,POQ)然后让我们说c3是否不可更新然后它应该总是有值,第一个条目作为POQ如果有人试图更新那么它应该给出一些受约束的列特定错误。
如果有人对上述限制进行了相同的表级定义,那么请帮助并告诉我。
谢谢
答案 0 :(得分:3)
我不是MySQL的专家,但我想By Sever,你可以应用这些限制。只需从你的用户中删除该列的更新权限。您可以通过着名的MySQL Grant查询
here is the Update Grant Section
答案 1 :(得分:1)
你可以试试这个论坛上的代码(link)..我jusy在google上查了一下,这就是我发现的。
答案 2 :(得分:1)
这可以通过MySQL中的trigger完成:
DELIMITER ;;
CREATE TRIGGER `trig_tbl_xyz_before_update`
BEFORE UPDATE ON `tbl_xyz` FOR EACH ROW
BEGIN
IF NEW.c3 != OLD.c3 THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'tbl_xyz.c3 is not allowed to be updated, stop trying to update it.';
END IF;
END;;
DELIMITER ;
当尝试将tbl_xyz.c3
更新为其他值时,这将给出以下响应:
错误代码:1644。不允许更新tbl_xyz.c3,请停止尝试更新它。
我使用了 45000 错误代码,因为它在SIGNAL文档中得到了建议。
要发出通用SQLSTATE值的信号,请使用'45000',表示“未处理的用户定义的异常”。