DROP TABLE `dasi_util`.`student`
CREATE TABLE `dasi_util`.`student`(
`id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
`stu_id` VARCHAR(32) COMMENT '學生id',
`stu_name` VARCHAR(32) COMMENT '學生姓名',
`f1` VARCHAR(32) COMMENT '結果1',
`f2` VARCHAR(32) COMMENT '結果2',
PRIMARY KEY (`id`)
);
DELIMITER $$
DROP TRIGGER IF EXISTS `dasi_util`.`update_student`$$
CREATE TRIGGER `dasi_util`.`update_student`
BEFORE UPDATE ON `dasi_util`.`student`
FOR EACH ROW
BEGIN
SET new.`f1` = new.`stu_id`;
SET new.`f2` = old.`stu_id`;
END $$
DELIMITER ;
插入數據
INSERT `student`(f1,f2) VALUES(0,0);
INSERT `student`(stu_id,f1,f2) VALUES(10,0,0);
INSERT `student`(f1,f2) VALUES(0,0);
INSERT `student`(stu_id,f1,f2) VALUES(10,0,0);
SELECT * FROM student;
id | stu_id | stu_name | f1 | f2 |
---|---|---|---|---|
1 | (NULL) | (NULL) | 0 | 0 |
2 | 10 | (NULL) | 0 | 0 |
3 | (NULL) | (NULL) | 0 | 0 |
4 | 10 | (NULL) | 0 | 0 |
修改數據
UPDATE `student` SET `stu_id`='1' WHERE id=1;
UPDATE `student` SET `stu_id`='1' WHERE id=2;
UPDATE `student` SET `stu_name`='1' WHERE id=3;
UPDATE `student` SET `stu_name`='1' WHERE id=4;
SELECT * FROM student;
id | stu_id | stu_name | f1 | f2 |
---|---|---|---|---|
1 | 1 | (NULL) | 1 | (NULL) |
2 | 1 | (NULL) | 1 | 10 |
3 | (NULL) | 1 | (NULL) | (NULL) |
4 | 10 | 1 | 10 | 10 |
通過這1、2兩條數據推論出:
修改了stu_id,new.stu_id的值就是stu_id修改后的值;old.stu_id的值是原有的值(NULL也不例外)
通過這3、4兩條數據推論出:
修改了stu_name,new.stu_id的值就是old.stu_id的值;old.stu_id的值是原有的值(NULL也不例外)
小結
new的值在沒有修改的時候是和old的值一樣的(含NULL),但當修改了之后,new的值就是新的值