千家信息网

触发器确实好用

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,MYSQL:建立一个触发器,实现在删除一个表格时,自动把删除的数据保存到一张备份表中,并加上删除时间:建立备份表:CREATE TABLE `products_` (prod_id int(11) N
千家信息网最后更新 2024年11月11日触发器确实好用

MYSQL:

建立一个触发器,实现在删除一个表格时,自动把删除的数据保存到一张备份表中,并加上删除时间:

  1. 建立备份表:

    CREATE TABLE `products_` (

    prod_id int(11) NOT NULL,

    vend_id int(11) NOT NULL,

    prod_name char(20),

    prod_price int(11),

    prod_desc char(50),

    del_time datetime ,

    PRIMARY KEY (`prod_id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=gbk

  2. 建立触发器:

DROP TRIGGER prod_delete; --删除触发器prod_delete,如果存在.要修改触发器只能删除重建;

DELIMITER $$ --重定义语名结束符;

CREATE TRIGGER prod_delete --触发器为prod_delete;

BEFORE DELETE ON products --在删除products表内容前生效

FOR EACH ROW --针对所有删除的行

BEGIN --开始触发器内容

INSERT INTO products_ (prod_id,vend_id,prod_name,prod_price,prod_desc,del_time) VALUES (old.prod_id,old.vend_id,old.prod_name,old.prod_price,old.prod_desc,NOW());

END; --触发器内空结束

$$ --重定义语名结束符;

DELIMITER ; --重新定义语名结束符;



MSSQL:

当更新物料库存时,自动更新BOM分录表的即时库存栏:


SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO


create TRIGGER ICInventory_update --建立ICInventory_update 触发器,用alter进行修改

ON ICInventory --建立在库存表上

AFTER update --作用于库存更新后

AS

begin --开始执行动作

update ICBOMChild set FEntrySelfZ0142=Inserted.fqty from Inserted where ICBOMChild.FItemID=Inserted.FItemID and inserted.FStockID='4435'

end --结束

GO --运行



MYSQL 和MSSQL的临时表和格式不同,mysql 只有更新数据的 new 表 和删除数据的 old 表,MSSQL的更新表则名为Inserted,存放删除数据的临时表则名为deleted 。




0