mysql表

时间:2015-07-04 21:20:06

标签: mysql

如何定义一个应该有一列不可更新的mysql表我的意思是一旦插入它就不允许用户以任何方式更新。 例如,名为tbl_xyz的表有3列,其中一列不可更新 tbl_xyz(c1,c2,c3),假设我插入值为(MBX,123,POQ)然后让我们说c3是否不可更新然后它应该总是有值,第一个条目作为POQ如果有人试图更新那么它应该给出一些受约束的列特定错误。

如果有人对上述限制进行了相同的表级定义,那么请帮助并告诉我。

谢谢

3 个答案:

答案 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',表示“未处理的用户定义的异常”。