MYSQL中触发器

本文介绍如何使用SQL触发器来维护两个相关表间的数据一致性。通过具体案例展示了UPDATE触发器和DELETE触发器的创建及工作原理,确保在修改或删除学生信息时其借书记录同步更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化是自动生效,唤醒调用触发器以响应INSERT,DELETE,UPDATE语句

常见触发器有三种:分别应用于INSERT、UPDATE、DELETE事件;

例如:两个表如下:

CREATE TEBLE Student(                                       ——学生表

                  StudentID  int  primary key,                   ——学号

                  ...  ...  ... 

)        

CREATE TABLE BorrowRecord(                           ——学生借书记录表

                  BorrowRecord  int  Identity(1,1),     ——流水号

                  StudentID  int,                                          ——学号

                  BorrowDate  datetime,                           ——借出时间

                  ReturnDATE  datetime,                          ——归还时间

功能一:如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关,也就是同时更改借书记录表的学号;

创建一个UPDATE触发器:

CREATE TRIGGER TruStudent                                                ——创建触发器

ON Student                                                                                   ——在student表上创建触发器

for UPDATE                                                                                   ——触发器类型为UPDATE

AS                                                

if UPDATE(StudentID)                                                               ——如果ID值更新了,触发器开始

begin

UPDATE BorrowRecord                                                              

set StudentID=i.StudentID                                                          ——设置ID值等于新的ID值

FROM BorrowRecord br,Inserted i,Deleted d

where br.StudentID=d.StudentID                                               ——当BR表中的ID值等于旧的ID值事


功能二:如果该学生已经毕业,我希望删除他的学号的同时,也删除他的借书记录;

创建一个DELETE触发器

CREATE TIRIGGER TruStudent

ON Studrnt

FOR DELETE

AS

IF DELETE(StudentID)

begin 

DELETE BorrowRecord

FROM BorrowRecord  br ,deleted d

where  br.StudentID=d.StudentID


PS:触发器中有两个虚拟表,分别为deleted、inserted,分别表示触发事件中“旧的一条记录”和“新的一条记录”



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值