触发器中的NEW和OLD,在不同的情况下,分布代表什么?
时间: 2023-06-23 22:08:02 浏览: 107
在数据库中,当触发器被触发时,系统会自动创建两个名为NEW和OLD的虚拟表,用于存储与触发器相关的数据。具体来说,它们分别代表:
- NEW:在触发器执行之前,存储被修改的数据。
- OLD:在触发器执行之前,存储被修改的数据的原始值。
这两个虚拟表的使用取决于触发器的类型和操作。例如,在UPDATE触发器中,OLD表示被修改的数据的原始值,而NEW表示修改后的值。在INSERT触发器中,NEW表示插入的新行的值,而OLD没有意义。在DELETE触发器中,OLD表示被删除的行的值,而NEW没有意义。
相关问题
已经在表surgical_application中设置了以下两个触发器:BEGIN -- 更新operating_room表的or_state字段为已被申请和开始时间结束时间信息 UPDATE operating_room SET operating_room.or_state = CONCAT('已被申请,开始时间:', NEW.start_date, ',结束时间:', NEW.end_date) WHERE or_id =NEW.sa_or_id; END 以上触发器是AFTER插入 BEGIN IF NEW.end_date = NOW() THEN UPDATE operating_room SET or_state = '还未被申请' WHERE or_id = OLD.sa_or_id; END IF; END 以上触发器是AFTER更新 为什么只会执行第一个触发器? 怎样让两个触发器都执行?
根据你提供的信息,你已经在表surgical_application中设置了两个触发器,一个是在插入操作之后执行的触发器,另一个是在更新操作之后执行的触发器。目前你只观察到第一个触发器被执行,想知道如何让两个触发器都执行。
首先,请确保在执行更新操作之后,触发第二个触发器的条件满足。根据你提供的第二个触发器的逻辑,只有当更新的记录的end_date等于当前时间(NOW())时,才会执行更新操作。
如果更新操作符合第二个触发器的条件,但触发器没有执行,请确保以下几点:
1. 确认触发器是否被正确添加到表surgical_application中。可以通过查询数据库中的触发器来验证。
2. 确保更新操作是在更新surgical_application表的时候执行的,并且是在end_date字段被更新的情况下。
3. 检查是否有其他触发器或约束条件阻止了第二个触发器的执行。可能存在其他触发器或约束条件优先级较高,导致第二个触发器无法执行。
如果以上步骤都没有解决问题,请提供更多关于数据库和触发器设置的详细信息,以便我能够更好地帮助你。
create or replace trigger tg_java5_backup after --执行sql之后执行--before是事前触发器,after是事后触发器 insert or update or delete --增、删、改都触发 on java5 for each row--行级触发器 declare begin if inserting then insert into java5_back(id,name,gz)values(:new.id,:new.name,:new.gz); elsif updating then update java5_back set id=:new.id,name=:new.name,gz=:new.gz; elsif deleting then delete from java5_back where id=old.id; end if; exception when others then raise_application_error(-20003, '备份失败'); end;
这是一个用于在插入、更新或删除Java5表的行级触发器的示例代码。每当执行这些操作后,触发器将在java5_back表中创建相应的备份。
触发器的名称是tg_java5_backup,它会在每个行级别的操作后执行。在触发器的声明部分,我们指定了触发器应该响应的操作类型。
在触发器的主体部分,我们使用条件语句判断正在执行的操作类型。如果是插入操作,则将新记录的id、name和gz值插入到java5_back表中。如果是更新操作,则将java5_back表中与旧记录id相匹配的记录更新为新记录的值。如果是删除操作,则从java5_back表中删除与旧记录id相匹配的记录。
最后,我们添加了一个异常处理部分,以处理任何其他异常情况。在这种情况下,我们使用raise_application_error函数引发一个自定义错误消息。
请注意,这只是一个示例触发器,你可以根据需要进行修改和适应。
阅读全文