数据库触发器

触发器是一种预定义的存储过程,它在特定数据库事件(如向表中插入、更新或删除行)时自动执行。

通用格式:
create trigger trigger_name before|after TRIGGER_EVENT ON
TABLE_NAME FOR EACH ROW on_trigger_sql

TRIGGER_EVENT表示触发事件,即触发器执行条件(触发事件),包含delete、insert和update语句;
before、AFTER与DELETE、INSERT和UPDATE的组合共6种:
before insert : 在执行 insert之前,执行触发器
after insert : 在执行 insert 之后,执行触发器
before update :在执行 update之前,执行触发器
after update :在执行 update 之后,执行触发器
before delete :在执行 delete之前,执行触发器
after delete :在执行 delete 之后,执行触发器

以mysql为例:实现订单库存表(order_tbl)新增触发插入到新表

CREATE TRIGGER order_tbl_tguser_insert  ---触发器名字
AFTER INSERT ON order_tbl   ---指定操作,在插入表后
FOR EACH ROW
BEGIN   ---以下是触发后的操作
  INSERT INTO order_tbl_new(id,product_id,total_amount,status)
  VALUES(NEW.id,NEW.product_id,NEW.total_amount,NEW.status);
END;

oracle的情况下,博主验证到可能执行的时候个别情况需要改动,可能跟数据库事务有关

create or replace trigger order_tbl_tguser_insert  ---触发器名称
after insert on order_tbl              ---在新增之后进行操作,其他操作就将insert改为对应操作即可,例如update
for each row               ---每改动一行就同步下数据
DECLARE  ---这里也可以不定义数据库的参数
  PRAGMA AUTONOMOUS_TRANSACTION; --个别情况没有这句话就会触发异常
	n_id varchar2(999);
	n_product_id varchar2(999);
	n_total_amount varchar2(999);
	n_status varchar2(999);
begin
	n_id := :new.ID;
	n_product_id := :new.product_id;
	n_total_amount := :new.total_amount;
	n_status := :new.status;
  insert into order_tbl_new(id,product_id,total_amount,status) 
	values(n_id,n_product_id,n_total_amount,n_status);
 COMMIT;
end;

详细的可以参考:https://zhuanlan.zhihu.com/p/663101881
我这边只是做个简单使用记录

你可能感兴趣的:(数据库,数据库,触发器)