sql数据库触发器怎么写(SQL 触发器编写)

本文目录
- SQL 触发器编写
- sql 触发器怎么写
- SQL触发器编程
- SQL 图书馆系统数据库触发器代码
- SQL触发器问题,如何写入触发器
- 您好 问下sqlserver中当数据库表的某个字段发生改变 删除另外一张表的数据 触发器怎么写
SQL 触发器编写
你这个是mysql数据库还是oracle的,这里给你说下mysql的实现吧;
写触发器需要知道触发器的语法恩,然后考虑业务场景,
你这个业务是 当这个表里的time栏位被新增数据时,也就是插入数据之前before事件;
create trigger triggerName
before insert on ord
for each row
(逻辑处理 语句);
以下是完整实现:
CREATE TRIGGER tri_ord before INSERT ON ord
FOR EACH ROW
BEGIN
IF LEFT(new.time,4) = 2015 THEN
SET new.time = CONCAT(2014,RIGHT(new.time,4));
END IF;
END;
我们有小组,希望可以一起学习 Oracle-Linux交流 103 382 476
sql 触发器怎么写
DROP TRIGGER IF EXISTS `tri_insert_A`;
CREATE TRIGGER `tri_insert_A` AFTER INSERT ON `B` FOR EACH ROW begin
INSERT INTO B(name,qty1) VALUES (new.name, new.qty1);
end
DROP TRIGGER IF EXISTS `tri_insert_A`;
CREATE TRIGGER `tri_insert_A` AFTER DELETE ON `B` FOR EACH ROW begin
INSERT INTO B(name,qty1) VALUES (old.name, old.qty1);
end
建议详细了解一下触发器的写法,你这个问题,提的太简单了。
SQL触发器编程
1、 在“Borrow”表中创建一个触发器ins_borrower_tr,当向“借阅”表中插入记录时,“借书日期”不能为空值,“还书日期”必须为空值。不满足上述条件则不允许向“借阅”表中插入记录,满足上述条件则允许插入,同时得到该书的应还日期,且“图书”表中对应的图书数量要减1,此操作对应读者的借书行为。----“借书日期”不能为空值 可以通过 IS NOT NULL 来设置,不需要触发器;----“还书日期”必须为空值 可以通过设置默认值实现,就是不管输入何值,最后都清空;----“应还日期”是通过“借书日期”计算得出、“图书”表中对应的图书数量要减1 :两个功能通过触发器实现;CREATE TRIGGER ins_borrower_tr
ON Borrow
FOR INSERT
AS
BEGIN
UPDATE Borrow SET 应还日期 = 借书日期 + n FROM Borrow,Inserted WHERE Borrow.b_id, = Inserted.b_id 【其他的类似】
END
GO 2、在“Borrow”表中创建一个触发器del_borrower_tr,当删除“借阅”表中的某个记录时,若“还书日期”为空值,则不允许删除该记录。---- 这个可以通过触发器实现 3、在“Borrow”表中创建一个触发器update_return_tr,当更新“借阅”表中的某个记录时,只能更新“还书日期”字段,其他字段不能更新,请计算出是否过期并给出罚款信息(过期一天罚款0.1元)。如果更新,“book”表中对应的图书数量要加1。此操作对应读者的还书行为。----只能更新“还书日期”字段,其他字段不能更新:这个不好实现的,因为如果程序中是可写的,就有点麻烦了!建议在程序中设置其他字段修改时为只读属性。----其他科通过触发器实现。
SQL 图书馆系统数据库触发器代码
1、---------------这是分割线--------------------------
Create Trigger tg_借书触发器名 on For Insert
as
update .可借天数
from .读者卡号
where FROM INSERTED)
update .在库数量-1
where .图书号 in (select 图书号 from Inserted)
update .可错数量-1
where .读者卡号 in (select 读者卡号 from Inserted)
2、--------------------这是分割线--------------------------------
create trigger tg_还书触发器名 on For Update
as
update .在库数量+1
where .图书号 in (select 图书号 from Deleted)
update .可错数量+1
where .读者卡号 in (select 读者卡号 from Deleted)
--超期时插入到超期记录表
if(select 1 from Deleted where 应还日期《getdate())
begin
--insert into 超期记录表(编号,读者卡号,超期天数,超期金额) values(…………)
-----题目中没给出超期金额算法,编号应该是自动不应该手动插入。
end
3、---------这是分割线--------------------
create trigger tr_插入读者触发器名 on For Insert
as
if(select 1 from Inserted where 类型=’学生’)
begin
update set 可借天数=30 where 读者卡号 in(select 读者卡号 from Inserted)
end
else
begin
update set 可借天数=60 where 读者卡号 in(select 读者卡号 from Inserted)
end
注释:触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。
Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。
Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。
SQL触发器问题,如何写入触发器
两种功能分开写比较容易,并且节省系统资源
1)只要新增了A表,C表中自动生成
设:B表已有 A1 VARCHAR,
(如果条件不符合,C表中 B1 VARCHAR从A表的哪里来的?)
并且,
B表.A1 VARCHAR=A表.A1 VARCHAR
C表.B1 VARCHAR=B表.B1 VARCHAR
代码如下:
create trigger trInsA
on A表
for insert
as
insert into C表 select b.B1,a.REM from inserted as a inner join b表 as b on a.A1=B.A1
2)A表中的REM等于C表中的REM
代码如下:
create trigger TrREM
on A表
for update
as
if update(REM)
update c表 set REM=a.atxt from
(select b.B1 as bb,a.REM as atxt from inserted as a inner join B表 as b on a.A1=b.A1) as aa
inner join c表 as cb on cb.B1=aa.bb
【P.S】
操作数据时,必须先插入B表数据,再插入A表数据
--补充回答:
CREATE TRIGGER
ON dbo.MF_POS_Z
FOR UPDATE
AS
if update(rem)
begin
update MF_MO_Z set REM=a.atxt from
(select
b.MO_NO as bb,
a.REM as atxt
from inserted as a
inner join MF_MO as b
on a.OS_NO=b.OS_NO
) as aa
inner join MF_MO_Z as cb on cb.MO_NO=aa.bb
end
楼主去update C,C是别名,到哪里找C表对象去更新啊
您好 问下sqlserver中当数据库表的某个字段发生改变 删除另外一张表的数据 触发器怎么写
--创建测试表
create table t_a(id int,name varchar(10));
create table t_b(id int,name varchar(10));
--测试数据
insert into t_a(id,name) values (1,’a’);
--创建 for delete 触发器
create trigger trg_t_a_1
on t_a
for delete
as
begin
insert into t_b
select id,name from deleted;
end
--从t_a中删除一条数据
delete from t_a where id=1;

更多文章:
dos命令清屏(Windows DOS内部命令详解04——del、ren、cls、ver、date、time)
2026年11月6日 15:40
constantly的用法及词组(英语时态对应的时间状语都有哪些)
2026年11月6日 15:20
sql2016安装后如何打开(怎么打开sql server 2016 管理工具)
2026年11月6日 15:10
arcgis怎么设置文本框样式?用JS怎么实现一个把一个文本框中的选中内容加粗,效果基本上和编辑器的加粗效果相同急需
2026年11月6日 10:50





