MySQL数据库可以通过触发器,使之无法修改某些字段的数据,同时又不会影响修改其他字段。
1
2
3
4
5
6
7
8
9
10
11
|
DROP TRIGGER IF EXISTS `members`; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE= '' ; DELIMITER // CREATE TRIGGER `members` BEFORE UPDATE ON `members` FOR EACH ROW BEGIN set new. name = old. name ; set new.cellphone = old.cellphone; set new.email = old.email; set new. password = old. password ; END // DELIMITER ; SET SQL_MODE=@OLD_SQL_MODE; |
再举一个例子:
1
2
3
4
5
6
7
8
|
CREATE TABLE `account` ( `id` INT (10) UNSIGNED NOT NULL AUTO_INCREMENT, ` user ` VARCHAR (50) NOT NULL DEFAULT '0' , `cash` FLOAT NOT NULL DEFAULT '0' , PRIMARY KEY (`id`) ) COLLATE = 'utf8_general_ci' ENGINE=InnoDB; |
每一次数据变化新增一条数据
1
2
3
4
|
INSERT INTO `test`.`account` (` user `, `cash`) VALUES ( 'neo' , -10); INSERT INTO `test`.`account` (` user `, `cash`) VALUES ( 'neo' , -5); INSERT INTO `test`.`account` (` user `, `cash`) VALUES ( 'neo' , 30); INSERT INTO `test`.`account` (` user `, `cash`) VALUES ( 'neo' , -20); |
保护用户的余额不被修改
1
2
3
4
5
6
7
8
|
DROP TRIGGER IF EXISTS `account`; SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE= '' ; DELIMITER // CREATE TRIGGER `account` BEFORE UPDATE ON `account` FOR EACH ROW BEGIN set new.cash = old.cash; END // DELIMITER ; SET SQL_MODE=@OLD_SQL_MODE; |