场景:
对外提供的演示系统,提供了一个测试用户test,要禁止test用户修改密码,防止别人无法登陆。
1、在代码中屏蔽掉密码修改逻辑(推荐)。
2、数据库中禁止test用户这条数据的修改。
注意:这里要实现禁止某行(1条)的数据更新,而不是限制整个表的数据更新。
# 表结构 CREATE TABLE `aaa` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(100) DEFAULT NULL, `password` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
# 触发器实现禁止密码字段修改
# 方法就是在更新前检查新密码是否和老密码一致,如果不一致,则设置新密码字段值为旧值,通过new或者old获取新旧值。
# 通过判断username来精确到某一条数据
DELIMITER $$ USE `test`$$ DROP TRIGGER /*!50032 IF EXISTS */ `deny_test_password`$$ CREATE /*!50017 DEFINER = 'root'@'%' */ TRIGGER `deny_test_password` BEFORE UPDATE ON `aaa` FOR EACH ROW BEGIN IF old.username = 'test' THEN IF new.password != '111' THEN SET new.password = '111'; END IF; END IF; END; $$ DELIMITER ;