在MySQL中用old和new表示执行前和执行后的数据。 问题的起源 之前对数据库的触发器是这样写的, 1 CREATE TRIGGER triggerName after insert ON consumeinfo 2 FOR EACH ROW 3 BEGIN 4 UPDATE consumeinfo SET new.金额=0; 5 END; 1. 2. 3. 4. 5. 触发器创建没问题,但是插入数据出现以下错误。 [Err] ...
可以看出,我们set的是新值(new)。而用where条件限定的是旧值(old)。 这样就完成更新操作了。 3.删除操作delete 当使用delete语句的时候,删除的那一条数据相对于删除数据后表的数据来说就是old。 比如下面这个触发器 drop triggerifexists delete_tableB; -- 如果有这个触发器就先删除 create trigger delete_tabl...
drop trigger if exists update_tableB; -- 如果有这个触发器就先删除 create trigger update_tableB -- 触发表名称 update_tableB after update -- 触发条件,在update操作之后 on tableA -- 需要在哪个表触发 for each row begin update tableB set new.`code`, new.`id` WHERE code_code=old.`code`;...
如果你在触发器里面对刚刚插入的数据进行了 insert/update, 会造成循环的调用. 如: create trigger test before update on test for each row update test set NEW.updateTime = NOW() where id=NEW.ID; END 应该使用set: create trigger test before update on test for each row set NEW.updateTime = NO...
SET NEW.amount = 0; ELSEIF NEW.amount > 100 THEN SET NEW.amount = 100; END IF; END;// mysql> delimiter ; # 验证触发器作用 mysql> select * from account; +---+---+ | acct_num | amount | +---+---+ | 137 | 14.98 | | 141 | 1937.50 |...
修改了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),但当修改了之后,...
在INSERT型触发器中,NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据; 在UPDATE型触发器中,OLD用来表示将要或已经被修改的原数据,NEW用来表示将要或已经修改为的新数据; 在DELETE型触发器中,OLD用来表示将要或已经被删除的原数据; 另外,OLD是只读的,而NEW则可以在触发器中使用 SET 赋值,这样不会再次触发触发器...
现在如果t21表中的s1列的值是55,那么执行了"UPDATE t21 SET s1 = s1 + 1"之后@old的值会变成55, 而@new的值将会变成56。 触发器的执行间隔:FOR EACH ROW子句通知触发器每隔一行执行一次动作,而不是对整个表执行一次。 列值递增: create table a( id int primary key auto_increment,##设置为自动递增 ...
下面是一个 简单的 mysql 触发器的例子。mysql> DELIMITER // mysql> CREATE TRIGGER BeforeInsertTest -> BEFORE INSERT ON test_trigger_table -> FOR EACH ROW -> BEGIN -> SET new.val = '100';-> END;-> // Query OK, 0 rows affected (0.02 sec)mysql> mysql> INSERT ...
在DELETE型触发器中,OLD用来表示将要或已经被删除的原数据; 另外,OLD是只读的,而NEW则可以在触发器中使用 SET 赋值,这样不会再次触发 触发器,造成循环调用 四、触发器实例 实例1:给student表插入数据后记录其操作记录。 create trigger student_after_insert after insert on student ...