sql触发器

MySQL——触发器

自闭症网瘾萝莉.ら 提交于 2020-02-27 11:27:51
MySQL语句在需要执行时被执行,存储过程也是如此。但是,如果想要某些SQL在事件发生时自动执行,这就需要触发器。 基本语法 //创建触发器 CREATE TRIGGER name //删除触发器 DROP TRIGGER name 创建触发器 在创建触发器时需要给出4条信息 唯一的触发器名 触发器需要关联的表 触发器应该响应的活动(DELETE、INSTERT或UPDATE) 触发器何时执行(处理之前还是之后) 删除触发器 为了删除一个触发器,可以使用DROP TRIGGER 语句。如下所示 使用触发器 INSERT触发器 INSERT触发器在INSERT语句执行之前或之后执行。需要知道以下几点: 在INSERT触发器代码内,可以用一个名为NEW的虚拟表,访问被插入的行 在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值) 对于AUTO_INCREMENT列,NEW在INSERT执行前包含0,在INSERT执行之后包含新的自动生成值 DELETE触发器 DELETE触发器在DELETE语句执行之前或之后执行。需要知道以下两点 在DELETE触发器代码中,可以引用一个名为OLD的虚拟表,访问被删除的行 OLD中的值全都是只读的,不能更新 UPDATE触发器 UPDATE触发器在UPDATE语句执行之前或之后执行。需要知道以下几点

MYSQL触发器的使用

一笑奈何 提交于 2020-02-27 09:37:23
概念:触发器是一种特殊的储存过程,在满足定义条件操作时触发,并且自动执行触发器中预先设定好的定义的语句集合 触发器是特殊的储存过程 触发器是在对表操作时,满足条件就可以自动调用预先编译的 sql 语句 安全性 可以基于数据库的值使用户具有操作数据库的某种权利 审计 可以跟踪用户对数据库的操作 实现复杂的数据完整性规则 创建语法:四要素(操作对像 触发时间 触发事件 触发操作) 触发器关键字: trigger Now() 时间函数 Old 表只读操作, new 表可以在触发器中使用用 set 赋值操作,避免重复触发触发器 触发器语法: Create trigger 触发器名 After|before # 触发时间 Insert|update|delete # 触发事件 On 表名 # 触发对像 For each row # 针对表中每一条数据都会触发 Begin SQL 操作 End 注意:触发器名: tr_xxx 触发时机: After|before (触发事件之后 | 触发事件之前) 触发事件: Insert|update|delete 触发对像就是表,也就以为,触发器是建立在表上的 For each row 表示任何一条记录上的操作满足触发事件都会触发该触发器 来源: https://www.cnblogs.com/520WANG/p/12370403.html

开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle

时间秒杀一切 提交于 2020-02-11 12:12:29
1. 子程序的各个部分: 声明部分、可执行部分、异常处理部分(可选) 2.子程序的分类: A. 过程 - 执行某些操作 a. 创建过程的语法: CREATE [OR REPLACE] PROCEDURE <procedure name> [(<parameter list>)] IS|AS <local variable declaration> BEGIN <executable statements> [EXCEPTION <exception handlers>] END; b. 过程参数的三种模式: IN:用于接受调用程序的值、默认的参数模式 OUT:用于向调用程序返回值 IN OUT:用于接受调用程序的值,并向调用程序返回更新的值 c. 将过程的执行权限授予其他用户: SQL> GRANT EXECUTE ON find_emp TO MARTIN; SQL> GRANT EXECUTE ON swap TO PUBLIC; d. 删除过程:SQL> DROP PROCEDURE find_emp; B. 函数 - 执行操作并返回值 a. 创建函数的语法: CREATE [OR REPLACE] FUNCTION <function name> [(param1,param2)] RETURN <datatype> IS|AS [local declarations]

PL/SQL轻量版(四)——存储函数/存储过程与触发器

眉间皱痕 提交于 2020-02-11 11:56:34
概述   ORACLE 提供可以把 PL/SQL 程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数。过程和函数统称为 PL/SQL 子程序,他们是被命名的 PL/SQL 块,均存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。 过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据。 一、存储函数    1.创建函数        内嵌函数 CREATE [OR REPLACE] FUNCTION function_name [ (argment [ { IN | IN OUT }] Type, argment [ { IN | OUT | IN OUT } ] Type ] [ AUTHID DEFINER | CURRENT_USER ] RETURN return_type { IS | AS } <类型.变量的说明> BEGIN FUNCTION_body EXCEPTION 其它语句 END; 说明: 1) OR REPLACE 为可选. 有了它, 可以或者创建一个新函数或者替换相同名字的函数, 而不会出现冲突 2) 函数名后面是一个可选的参数列表, 其中包含 IN, OUT 或 IN OUT 标记. 参数之间用逗号隔开. IN 参数 标记表示传递给函数的值在该函数执行中不改变; OUT

PL/SQL 触发器

北城余情 提交于 2020-02-11 11:50:10
PL/SQL 触发器 触发器:触发器是一种特殊的存储过程,他与数据表紧密联系,用于保护表中的数据,当定义了特定类型触发器的基表执行插入、修改或删除表中的数据的操作时,将自动触发触发器中定义的操作,以实现数据的一致性和完整性 触事件发:insert delete update 触发时间: before after instead of 触发变量: old new 针对每一行: for each row 展示错误: show error 先创建一个表: create table stemp( ID number(10) primary key, sname varchar2(20) ); 在插入一条数据的时候 触动 触发器 create or replace trigger tri_insert_stemp after insert on stemp begin dbms_output.put_line('插入了新的数据'); end; 在输出的时候 触动 触发器 create or replace trigger tri_delete_stemp before delete on stemp for each row begin dbms_output.put_line('删除了数据 id='||:old.id||',sname='||:old.sname); end; 日志 触发器

PL/SQL触发器

大兔子大兔子 提交于 2020-02-11 11:48:46
在本章中,我们将讨论和学习PL/SQL中的触发器。 触发器是存储的程序,在发生某些事件时会自动执行或触发。事实上,触发器是为了响应以下任何事件而被执行的 - 数据库操作(DML)语句( DELETE , INSERT 或 UPDATE ) 数据库定义(DDL)语句( CREATE , ALTER 或 DROP )。 数据库操作( SERVERERROR , LOGON , LOGOFF , STARTUP 或 SHUTDOWN )。 可以在事件关联的表,视图,模式或数据库上定义触发器。 使用触发器的好处 触发器可以用于以下目的 - 自动生成一些派生列值 强化参照完整性 事件记录和存储表访问信息 审计 表的同步复制 实施安全授权 防止无效的事务 创建触发器 创建触发器的语法是 - CREATE [OR REPLACE ] TRIGGER trigger_name {BEFORE | AFTER | INSTEAD OF } {INSERT [OR] | UPDATE [OR] | DELETE} [OF col_name] ON table_name [REFERENCING OLD AS o NEW AS n] [FOR EACH ROW] WHEN (condition) DECLARE Declaration-statements BEGIN Executable

【数据库视频】--触发器

夙愿已清 提交于 2020-02-05 01:38:18
依然老套路,5W2H WHAT 触发器也是一种存储过程,但是发生在指定表中,用于数据执行时,使用触发器能够强制性地将不同表的数据联系起来。和一般的存储过程相比,还是不同的,不同在触发器由事件调用,而后者用名称调用。 WHY 自动,安全,强制。 TYPES 要插入时,insert触发器发挥作用,更新时,update,删除时,delete,但如果要防止,响应或记录更改时,则是DDL触发器发挥作用。 CREATE INSERT 触发器 create trigger+触发器名称+on (在某个表格或者视图上)for/after /instead of (这是用来引出触发类型的字句)+delete /insert/update +as +执行的SQL语句。 DELETE 触发器 or UPDATE 触发器 创建第一个insert触发器时,我就在想,我们为什么要使用触发器?虽然上面已经说了,但我并没有真实地感受到,于是,我试了一下没有创建触发器时,单纯地删除表格中一条信息为,效果是第一张图片所示,而创建了触发器后,会发现它能够清晰地显示出被删除的信息。update 触发器也是一样! DDL触发器 DDL触发器更能体现触发器保持数据完整性和一致性的优点,因为写到会回滚,所以事务在处理完当前事务后,就终止了。 管理,嵌套与递归 所谓的对触发器的管理,就是 修改,禁用,启用,删除

PLSQL——09、触发器

萝らか妹 提交于 2020-02-03 09:59:14
触发器 trigger 触发器是一种特殊的过程,它的执行是由一系列事件触发的。这些事件有用户登录注销事件,DML语句执行事件等等。我们常用的就是DML触发器, 事件的精确粒度可以是表级或行级。 trigger的实际应用非常广泛,例如A表有数据DML操作,就可以在A表上做个触发器,将数据协同更新到B表。 我们也经常用触发器来做审计。 触发器可分为: database 触发器 :审计,例如记录用户登录和退出的信息等 schema 用户触发器 :可以用于:禁用DDL、禁止某个IP登录 DML触发器(表级 和 行级) :表级 DML前(before) DML后(after) ;行级 更新每一行触发一次 (before|after),行级带有for each row关键字 创建触发器语法 CREATE OR REPLACE TRIGGER trigger_name {BEFORE|AFTER|INSTEAD OF} EVENTs ON TABLE_NAME [for each row] declare ... begin ... end; {BEFORE|AFTER|INSTEAD OF} 触发器在事件执行之前或之后触发,还有一种替代触发器 EVENTs 不同类型的触发器有不同的事件,例如DML触发器 update or delete or insert ON TABLE_NAME

mysql触发器trigger 实例详解

房东的猫 提交于 2020-02-01 08:59:53
mysql触发器trigger 实例详解 (转自 https://www.cnblogs.com/phpper/p/7587031.html) MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 举个例子,比如你现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插入一条数据的之后帮你在日志表中插入一条日志信息。当然触发器并不是只能进行插入操作,还能执行修改,删除。 创建触发器 创建触发器的语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt trigger_name:触发器的名称 tirgger_time:触发时机,为BEFORE或者AFTER trigger_event:触发事件,为INSERT、DELETE或者UPDATE tb_name:表示建立触发器的表明

mysql触发器trigger 实例详解

一世执手 提交于 2020-02-01 08:58:31
mysql触发器trigger 实例详解 MySQL好像从5.0.2版本就开始支持触发器的功能了,本次博客就来介绍一下触发器,首先还是谈下概念性的东西吧: 什么是触发器 触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。 举个例子,比如你现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插入一条数据的之后帮你在日志表中插入一条日志信息。当然触发器并不是只能进行插入操作,还能执行修改,删除。 创建触发器 创建触发器的语法如下: CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt trigger_name:触发器的名称 tirgger_time:触发时机,为BEFORE或者AFTER trigger_event:触发事件,为INSERT、DELETE或者UPDATE tb_name:表示建立触发器的表明,就是在哪张表上建立触发器 trigger_stmt:触发器的程序体