mysql表中的不可更新列

Posted

技术标签:

【中文标题】mysql表中的不可更新列【英文标题】:Non Updatable column in mysql table 【发布时间】:2015-07-04 21:20:05 【问题描述】:

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

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

谢谢

【问题讨论】:

【参考方案1】:

我不是 MySQL 方面的专家,但我想通过 Sever,您可以应用此类限制。只需从您的用户那里删除对该列的更新权限。您可以通过著名的 MySQL Grant 查询来做到这一点here is the Update Grant Section

【讨论】:

【参考方案2】:

这可以通过 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”,这意味着“未处理的用户定义异常”。

【讨论】:

【参考方案3】:

你可以试试这个论坛上的代码 (link)。我只是在谷歌上查了一下,这就是我找到的。

【讨论】:

以上是关于mysql表中的不可更新列的主要内容,如果未能解决你的问题,请参考以下文章

mysql更新一个表不在另一个表中的数据

更新 MySQL 表中的排名

如何使用不相关表中的列数据更新列 - MySQL

更新 Mysql 表中的电子邮件

更新 MySQL 表中的大量行

尝试将日期作为python中的输入并使用mysql连接器更新mysql表中的值