sql触发器修改数据(sql触发器只修改当前行的值,不要整张表都改)

本文目录
- sql触发器只修改当前行的值,不要整张表都改
- sql创建触发器 当我把一个表中数据更改时另一个表中的数据也改变
- SQL触发器不允许修改某一列数据
- sql 触发器 修改值
- sql两张表互相有触发器修改对方字段
- 关于SQL触发器实现记录修改字段名称,变更前值,变更后值,变更时间
- SQL创建触发器trigger1,怎么实现同时修改
- SQL触发器修改录入值
sql触发器只修改当前行的值,不要整张表都改
你在写更新语句时候如果直接写更新就全表执行,要加FROM...WHERE...就可以选择你想要更新的行。
我用SQL Server 写了一个例子,可以执行成功:
ALTER TRIGGER Sum /* 触发器名为Sum */
ON dbo.wx /* 正对表维修(wx) */
FOR UPDATE /* 当有更新时执行 */
AS
IF UPDATE(rgf) /* 如果手动更新字段人工费 */
BEGIN
UPDATE wx SET wxmoney = rgf + clf; /* 就自动更新字段维修费=人工费+材料费,这种是更新了全表的,因为没有限定是某行 */
UPDATE pj SET pjsl=pjsl-1 FROM pj,xh WHERE xh.pjid=pj.pjid; /* 然后自动更新配件表,配件数量=配件数量-1,FROM配件表,消耗表,当消耗表.配件编号=配件表.配件编号,这种就只更新配件表中与消耗表的配件编号相等的字段了 */
END;
以上是SQL Server 的写法,要是Oracle语法有些不同,思路是一样的,没验证,但是应该问题不大,如下:
CREATE TRIGGER Sum
AFTER UPDATE ON dbo.wx
FOR EACH ROW /* 这有点不同,EACH ROW是行级触发,EACH STATEMENT是语句级触发 */
WHEN (UPDATE(rgf))
BEGIN
UPDATE wx SET wxmoney = rgf + clf;
UPDATE pj SET pjsl=pjsl-1 FROM pj,xh WHERE xh.pjid=pj.pjid;
END;
完全原创,希望对你有帮助!
sql创建触发器 当我把一个表中数据更改时另一个表中的数据也改变
很简单.
reate
or
replace
trigger
tri_name
after
update
on
表的名字
for
each
row
begin
if
Userstate=0
then
update
另外一个表
set
UserState
=
’0’;
dbms_output.put.line(’已改变’);
else
null;
end;
触发器比较经典的用法,百度就一大堆.
SQL触发器不允许修改某一列数据
create trigger aaa on
for update
as
--username列修改且存在sys_id=’A’就回滚
if update (username) And Exists(Select * From inserted where sys_id=’A’)
rollback transaction
sql 触发器 修改值
给表B建立一个Insert触发器,当表B发生插入记录的时候自动给表A的B字段+1
CREATE TRIGGER INSERT_B ON B
FOR INSERT
AS
至于具体中间的业务你怎么写就自己考虑啦
对了在触发器中可以调用虚拟的临时表inserted,这个是在插入触发器里面可以调用的,目的是查询在插入时某些值是否符合要求或者什么业务逻辑是否满足之类的等等
这个触发器只要表B发生了插入操作就会执行,如果你单纯只想给表A在表B有插入的时候+1
那么直接就UPDATE表A的B字段+1就好了
sql两张表互相有触发器修改对方字段
1、可以禁用和启用 功能来达到想过
# 启用、禁用触发器
--禁用触发器
disable trigger tgr_message on student;
--启用触发器
enable trigger tgr_message on student;
2、在触发器中判断表中数据的列,根据某一列来触发
比如:表A中如果a字段修改则触发 触发器
表B也可以根据某一列去限制
关于SQL触发器实现记录修改字段名称,变更前值,变更后值,变更时间
大概写一下
1.建表
create table t1(
col varchar2(100);
before varchar2(100);
after varchar2(100);
updatedate date
)
2.建触发器
create or replace trigger TRG_UPDATE_T2 before update on t2
for each row
BEGIN
if(:old.col1!=:new.col1)
{insert into t2 values(col1.name,:old.col1,:new.col1,sysdate};/*插入日志表,不过若要唯一标示,t1表还得有一个主键,这里没写出来*/
if(:old.col2!=:new.col2)
{insert into t2 values(col2.name,:old.col2,:new.col2,sysdate};
...
commit;
END;
SQL创建触发器trigger1,怎么实现同时修改
create trigger trigger1
on 学生信息表
for update
as
if update(学号)
update 成绩表 set 学号=a.asno from (select inserted.学号 as asno,deleted.学号 as bsno from inserted,deleted) as a inner join 成绩表 as b on a.bsno=b.学号
SQL触发器修改录入值
creat trigger 触发器名
on 表名
for insert,update
as
new.c:=null

更多文章:
数据库管理系统和数据库系统分别侧重(数据库,数据库管理系统,数据库系统,这三个分别是什么意思并举个实例)
2026年9月7日 17:00
springmvc的依赖(springMVC的注入方式有哪几种,这与springMVC依赖)
2026年9月7日 14:00
display flex 自动换行(overflow-y:hidden;overflow-x:auto;无效解决方法)
2026年9月7日 11:00
timestamp without time zone(Postgresql中to_date()函数使用问题)
2026年9月7日 09:40






