首页 > 数据库 >数据库---触发器

数据库---触发器

时间:2024-03-20 18:36:39浏览次数:30  
标签:语句 触发器 -- 数据库 after --- sql 执行

继续接上一讲,今天梳理一下数据库中的触发器的相关知识点。

一、触发器的概念

1.1触发器是什么?

触发器是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。关键词:自动触发。

1.2为什么要使用触发器?

触发器经常用于加强数据的完整性约束和业务规则等。

1.3 触发器类型

后置触发器 after
使用after定义的触发器为后触发型的触发器,只有在语句(引发触发器执行的)指定的操作都已成功执行,后续才执行触发器。该种触发器涉及的场景较多,较为常用。
ps:不能在视图上定义AFTER触发器
前置触发器 before
使用before 选项定义的触发器为前触发型触发器,在这种模式的触发器中,先指定执行触发器,而不是先执行语句。
举个例子:用前触发器实现:新插入职工数据时,其工资必须在相应工作的最低工资到最高工资之间。

二、触发器的书写格式

-- 触发器 TRIGGER   代码开发过程中,用的很少;数据体量较大时,尽量少用
-- 触发器的书写格式如下:
create trigger 触发器名称 after/before  insert/update/delete  on 表名 
begin
	-- 触发器业务代码
end

注意事项:
①触发器名称在数据库中,是唯一的。
②for 作用 等同于 after。
③在一个表上,可以建立多个名称不同、类型各异的触发器、每个触发器可由3个操作来引发。

三、触发器的使用

3.1创建触发器

 最后点击"保存"即可生效

3.2查看触发器

刚刚创建好的触发器,如何查看呢?

-- 查看触发器
show TRIGGERS

3.3修改触发器

-- 修改触发器:alter trigger 触发器名
ALTER trigger tri_age

3.4删除触发器

-- 删除触发器:drop trigeer 触发器名
DROP trigger tri_age

四、其他问题答疑

①前置触发器与后置触发器的区别?
前置触发器:before触发器执行失败,sql也会执行失败;
后置触发器:sql执行失败时,after触发器不会执行,sql会回滚;
②触发器与存储过程的区别?
触发器:是特殊的存储过程,是自动触发。
存储过程:由用户、程序、或者触发器 显式调用。
③行级触发器与语句级触发器的区别?
行级触发器:for each row (sql影响1行就触发1次),需要对每一行数据做处理,使用行级触发器。
语句级触发器:for each statement (默认,1条sql触发1次),语句执行完成后,做该语句的业务处理,用语句级别触发器。
特别注意:
mysql不支持语句触发器,所以必须写for each row。
oracle触发器中分行级触发器和语句级触发器,可不写for each row,无论影响多少行都只执行一次。
④可以在视图中创建after触发器吗?
不能

标签:语句,触发器,--,数据库,after,---,sql,执行
From: https://www.cnblogs.com/xj-excellent/p/18085807

相关文章

  • Vue学习笔记54--动画效果+过度效果
    动画效果示例一:Test.vue——主要代码文件<template><div><button@click="isShow=!isShow">显示.隐藏</button><!--方式一class=comeorgo--><!--<h2v-show="isShow"class="come">你......
  • ptaL2-008manachar做法
    之前考虑过如果输入样例很大怎么办,但是没有细想,今天看了看manachar,懊悔如果这个题样例增大一些变成L330分就好了hh,相比于洛谷上的模板题,这个题唯一不一样的就是有空格,所以不能再用char数组来保存,改用string来存储,C++中的getline函数前几天刚了解到正好也派上用场了constin......
  • 如何设置ORACLE数据库的OGG日志
    若要使用OGG,ORACLE必须开启归档模式,可以理解为设置ORACLE的REDOLOG落地,这样才能让OGG拿到所需的日志信息.1.查询数据库是否处于归档模式,如果处于归档模式,则返回结果ARCHIVELOG   SQL>selectlog_modefromv$database;2.如果不处于归档模式,则要开......
  • Android 逆向(四) - adb常用逆向命令
    Android逆向(四)-adb常用逆向命令本篇文章继续记录下adb的一些常用逆向命令.1:adbshellps该命令可以查看进程信息.用法:adbshellps|grep[pname]zh@zh:~/workSpace$adbshellpsUSERPIDPPIDVSZRSSWCHANADDRSNAME......
  • springboot-Swagger
    Swagger简介前后端分离Vue+SpringBoot后端时代:前端只用管理静态页面:html==>后端。。模版引擎JSP=>后端是主力前后端分离后端:后端控制层,服务层,数据访问层【后端团队】前端:前端控制层,视图层【前端团队】Swagger号称世界上最流行的API框架RestfulApi文档在线自动生成......
  • 教程|腾讯云高性能应用服务 HAI 快速搭建并使用AI模型 ChatGLM2-6B
    本次我们使用 腾讯云高性能应用服务HAI 体验快速搭建并使用AI模型 ChatGLM2-6B ,实现思路如下:1、体验 高性能应用服务HAI 一键部署 ChatGLM2-6B2、启动 ChatGLM2-6BWebUI 进行简单的对话3、开发者体验 JupyterLab 进行 ChatGLM2-6BAPI 的配置调用1、配......
  • 提升Java编程安全性-代码加密混淆工具的重要性和应用
     在Java编程领域中,保护代码安全性和知识产权至关重要。本文旨在探讨代码加密混淆工具在提升代码安全性和保护知识产权方面的重要性。我们将介绍几款流行的Java代码加密混淆工具,如ProGuard、DexGuard、Jscrambler、DashO和ipaguard,并分析它们的功能和适用场景,旨在帮助开发者选择......
  • opengl日记10-opengl使用多个纹理示例
    文章目录环境代码CMakeLists.txt文件内容不变。fragmentShaderSource.fsvertexShaderSource.vsmain.cpp总结环境系统:ubuntu20.04opengl版本:4.6glfw版本:3.3glad版本:4.6cmake版本:3.16.3gcc版本:10.3.0在<opengl学习日记9-opengl使用纹理示例>的基础上,拓展使用多个纹......
  • Springboot笔记-05
    1.Springboot的热部署spring为开发者提供了一个名为spring-boot-devtools的模块来使SpringBoot应用支持热部署,提高开发者的开发效率,无需手动重启SpringBoot应用。在pom文件加入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-b......
  • OSPF-1类Router LSA学习
    前面我们又复习了一遍OSPF概述,在OSPF建立关系后有几种交互报文,通过LSU类型报文包含LSA信息实现路由信息传递,常见了1、2、3、4、5、7类LSA,分别对应不同功能使用。这里先看下1类LSA-RouterLSA。一、LSA概述LSA,全称为LinkStateAdvertisement,即链路状态通告,是OSPF(OpenSho......