Karp

Mysql 触发器 禁止修改数据表的某一字段
网上真的是 copy 害人, 乱写 自己亲测有效创建测试表CREATE TABLE `test_table` ( ...
扫描右侧二维码阅读全文
19
2022/07

Mysql 触发器 禁止修改数据表的某一字段

网上真的是 copy 害人, 乱写 自己亲测有效

创建测试表

CREATE TABLE `test_table` (
  `uid` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '',
  `age` int(10) NOT NULL DEFAULT '0',
  `create_time` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`uid`)
) ENGINE=InnoDB AUTO_INCREMENT=10003 DEFAULT CHARSET=utf8mb4;

如果触发器已存在则删除

DROP TRIGGER IF EXISTS `test_trigger`;

创建触发器

DELIMITER // 

CREATE TRIGGER `test_trigger` 
    BEFORE UPDATE ON `test_table` 
    FOR EACH ROW
BEGIN
    set new.name=old.name;
    set new.age=old.age;
END //
DELIMITER;

分析下语句 :

DELIMITER 其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了. 这里 //就是间隔符

BEFORE UPDATE ON test_table 触发器条件 更新表记录.

set new.name=old.name 这里就很容易理解了, 关键字 new 更新操作中 set 内的数据 , old 就是原有数据
上面触发器 目的就是 监控表 test_table 更新事件, 更新字段用 原有数据 覆盖 新更新数据.

查看触发器

SHOW TRIGGERS; 

测试

上面我们已经创建了一张 test_table 表

更新namecreate_time 字段
···
update test_table set name='xxxxx', create_time=22222 where uid = 10002;


测试结果 很明显, `name` 修改没成功, 但 `create_time` 更新成功. 

通过触发器 我们就可以限制表内的某个字段, 不允许求改了

上面的方式 还是可以通过 delete insert 的方式绕开限制 . 所以该表需要限制删除. 不授予删除权限.

还有其他方式 禁止修改数据表的某字段. 下篇介绍下.
最后修改:2022 年 07 月 19 日 03 : 44 PM

发表评论