当前位置: 首页 > ai >正文

数据库11(触发器)

触发器有三种类型,包括删除触发器,更新触发器,添加触发器
触发器的作用是:当某个表发生某个操作时,自动触发触发器,进行触发器规定的操作

触发器语句

create trigger tname --创建触发器
on aa --创建在表上
for delete --创建在某个数据操作(增删改)上,insert/delete/update
as
begin
print ‘do delete’
end

delete aa
where title_id=‘PC9999’
加入该触发器后,对aa进行删除操作时会自动打印do delete语句
删除一行会触发一次,删除整表或多行也只触发一次,
即使没有符合删除条件的数据可以删除,该删除操作也会触发触发器
当操作可以满足多个触发器触发条件时,会有多个触发器同时被触发,进行相应操作

修改触发器:
alter trigger tname
……
修改触发器,只能在同一个表上,不可以修改表,如果表对象改变,需要新建一个触发器

触发器内部临时存储结构

触发器内部有临时存储结构,能够存储当前增删改操作的临时信息,是一个固定特殊临时的表,表名有deleted inserted,表示存储当前删除/增加/更新操作的临时信息
create trigger tname1
on aa
for delete
as
begin
declare @tempword varchar(50)
set @tempword=(select title from deleted)
print 'the deleted book is '+@tempword

print ‘do delete’
end

delete aa
where title_id=‘PC8888’

在触发器内部自定义变量,设置变量初始值为 被删除的对象的title列
打印返回结果,可以看到删除的title内容是什么
但是,自定义变量的方式只能由来进行单行数据的查询
如果同时对多个数据进行了删除操作,那么就不可以使用自定义变量
需要用到游标

practice

对jobs表的insert操作触发器进行修改,当输入的min_lvl>max_lvl时,两者互换,修正错误
alter trigger tname
on jobs
for insert
as
begin
declare @jobid int,@jobdcrp varchar(100),@min int,@max int
set @jobid=(select job_id from inserted)
set @jobdcrp=(select job_desc from inserted)
set @min=(select min_lvl from inserted)
set @max=(select max_lvl from inserted)

if @min>@max
begin
update jobs
set min_lvl=@max,set max_lvl=@min
where job_id=@jobid
print ‘I exchange it’
end

else
begin
print 'the inserted job_desc is ‘+cast(@jobid as varchar(10))+’ '+@jobdcrp
end
end

insert into jobs(job_desc,min_lvl,max_lvl)
values(‘new name’,50,15)
select * from jobs

http://www.xdnf.cn/news/1379.html

相关文章:

  • 智启未来|艾博连科技加入奇瑞雄狮科技LION AI联合实验室
  • VUE3中使用echarts,配置都正确,不出现tooltip
  • 大厂面试-redis
  • 【KWDB 创作者计划】_深度学习篇---向量指令集
  • system verilog 语句 耗时规则
  • 拥抱基因体检,迎接精准健康管理新时代
  • 3.3 技术框架:LangChain、ReAct、Memory与Tool Integration
  • ROS 快速入门教程02
  • (19)VTK C++开发示例 --- 分隔文本读取器
  • Kafka 详解
  • 服务器上安装jdk
  • Android Cordova 开发 - Cordova 快速入门(Cordova 环境配置、Cordova 第一个应用程序)
  • SQL Server 2022 常见问题解答:从安装到优化的全场景指南
  • Linux部署Web程序
  • openharmony5.0.0中C++公共基础类测试-线程相关(一)
  • 【项目篇】仿照RabbitMQ模拟实现消息队列
  • .NET、java、python语言连接SAP系统的方法
  • 音视频小白系统入门课-4
  • 个人mysql学习笔记
  • python中 zip的用法
  • 汽车免拆诊断案例 | 2016款奔驰C200L车组合仪表上多个故障灯偶尔点亮
  • 管理100个小程序-很难吗
  • JavaScript性能优化实战(3):内存管理与泄漏防范
  • Rust 学习笔记:Rust 简介
  • 四川气象数据智能体示范应用入围中国信通院“开源大模型+”案例
  • 数据结构手撕--【栈和队列】
  • fpga系列 HDL:跨时钟域同步 脉冲展宽同步 Pulse Synchronization
  • Redis Pipeline 详解
  • Elasticsearch内核探秘:从Shard分配到网络通信的深度实践指南
  • Kafka简介