sql触发器语句

本文介绍了SQL触发器的基本语法和使用示例,包括在插入、更新和删除操作前后的监听,以及如何使用`new`和`old`关键字处理行级别的数据变更。通过具体的触发器创建语句,展示了如何在数据表中自动执行特定的SQL操作。
-- 触发器语句格式
create trigger tr_order -- 创建监听器,监听名
before/after -- 什么时间进行监听,在发生什么行为之前或之后
insert/update/delete -- 对什么行为进行监听,如:添加、修改、删除行为
for each row -- 对每一行的行为都进行监听
begin
`sql语句操作命令`
end

create trigger tr_product
after
insert
for each ROW
begin
update t_order set o_p_num = o_p_num+1 where o_p_id=p_id
end

-- 关于new old 关键字的使用
-- new.p_id代表新增加的产品id
create trigger tr_order
AFTER
insert
for each ROW
begin
update t_order set o_p_num = o_p_num+1 where o_p_id=new.p_id
end

create trigger tr_order
AFTER
UPDATE
for each ROW
begin
update t_order set old.库存 = old.库存+(old.订单数量-new.订单数量)
where o_p_id=new.p_id
end














在不同的数据库系统中,创建触发器语句有所不同。 在MySQL中,创建触发器语法如下: ```sql create trigger trigger_name trigger_time trigger_event on tbl_name for each row trigger_stmt ``` 其中,`trigger_name` 标识触发器名称,由用户自行指定;`trigger_time` 标识触发时机,取值为 `before` 或 `after`;`trigger_event` 标识触发事件,取值为 `insert`、`update` 或 `delete`;`tbl_name` 标识建立触发器的表名,即在哪张表上建立触发器;`trigger_stmt` 是触发器程序体,可以是一句 SQL 语句,或者用 `begin` 和 `end` 包含的多条语句,每条语句结束要分号结尾。此外,MySQL 中定义了 `new` 和 `old`,用来表示触发器的所在表中,触发了触发器的那一行数据。具体使用为:在 `insert` 型触发器中,`new` 用来表示将要(`before`)或已经(`after`)插入的新数据;在 `update` 型触发器中,`old` 用来表示将要或已经被修改的原数据,`new` 用来表示将要或已经修改为的新数据;在 `delete` 型触发器中,`old` 用来表示将要或已经被删除的原数据,使用方法为 `new.columnName`(`columnName` 为相应数据表某一列名) [^2]。 以两个表 `table1` 和 `table2` 为例,在 MySQL 中创建触发器示例如下: ```sql -- 创建table1,table2表 create table table1(name char(30),age int)charset="utf8"; create table table2(name char(30),age int)charset="utf8"; -- 创建触发器 DELIMITER || create trigger tb2_auto_add after insert on table1 for each row begin insert into table2(name,age) values("老旧",33); end DELIMITER ; insert into table1(name,age) values("老刘",23); ``` [^4] 在 SQL Server 中,以 `after` 触发器为例,在执行 `insert`、`update`、`delete` 操作后,再去执行触发器本身。例如在 T - sql 语句中,会先把更新前的数据保存到 `testbackup` 表中,再去执行插入等操作,示例代码如下: ```sql select * into testbackup from deleted; -- 后续执行插入等操作,如插入id=3 MNname= SQLserver age=22 ``` [^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值