SQL触发器定义与使用

目录
  • 触发器简介
  • 触发器的创建及调用
  • 触发器的分类及执行顺序
  • 触发器的删除
  • 触发器的优缺点

比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。

CALL sp_add_student(
'S20170091', '杨艳', '女', '2003-04-09',
15, 'G0206', 89.23, 'T0021'
);

如果有多个学生的数据需要插入,则需要多次调用该存储过程;可否不开发存储过程,在向student表插入(INSERT)数据前,后台自动判断并插入老师数据?

触发器简介

触发器:一种与表操作有关的数据库对象,当触发器所在表上出现指定事件(新增、修改、删除数据)时,将调用该对象,即表的操作事件触发表上的触发器的执行。

触发器的创建及调用

比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据。

触发器的创建:使用关键字CREATE TRIGGER

CREATE TRIGGER tri_add_student BEFORE INSERT
ON student FOR EACH ROW
BEGIN
	IF NOT EXISTS(SELECT 1 FROM teacher WHERE teacher_id = new.teacher_id) THEN
	INSERT INTO teacher(teacher_id) VALUES (new.teacher_id);
END IF;
END;
INSERT INTO student VALUES(
'S20170092', '李文', '女', '2002-11-19',
16, 'G0206', 55.32, 'T0022'
);

触发器的分类及执行顺序

按事件类型分:

  • INSERT触发器;
  • UPDATE触发器;
  • DELETE触发器;

按执行先后分:

  • BEFORE触发器;
  • AFTER触发器;

NEW与OLD:

  • INSERT触发器:NEW 用来表示将要(BEFORE)或已经(AFTER)插入的新数据;
  • UPDATE触发器:OLD 用来表示将要或已经被修改的原数据,NEW 用来表示将要或已经修改为的新数据;
  • DELETE触发器:OLD 用来表示将要或已经被删除的原数据;

触发器执行时的异常情况:

  • 如果 BEFORE 触发器执行失败,SQL 无法正确执行;
  • SQL 执行失败时,AFTER 型触发器不会触发;
  • AFTER 类型的触发器执行失败,SQL 会回滚;

触发器的删除

触发器的删除:使用关键字DROP TRIGGER

如:DROP TRIGGER tri_add_student;

触发器的优缺点

优点:

  • 自动触发,无需调用;
  • 提供了一种检查、保证数据完整性的方法;
  • 与存储过程一样,增强SQL语言的功能和灵活性;

缺点:

  • 开发调试困难;
  • 可移植性差;

到此这篇关于SQL触发器定义与使用的文章就介绍到这了,更多相关SQL触发器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL数据库的触发器的使用

    目录 使用触发器 触发器 创建触发器 删除触发器 使用触发器 INSERT触发器 DELETE触发器 UPDATE触发器 触发器的进一步介绍 使用触发器 触发器 发生什么事情之后或之前,会自动执行某条语句,这就是触发器 创建触发器 创建触发器要给出的4条关键信息: 1.唯一的触发器名 2.触发器关联的表 3.触发器应该响应的活动(DELETE,INSERT or UPDATE) 4.触发器何时执行(处理之前or之后) CREATE TRIGGER语句创建触发器 CREATE TRIGGER ne

  • 详解MySQL中存储函数创建与触发器设置

    目录 1.创建存储函数 2.调用存储函数 3.创建触发器 4.在触发器中调用存储过程 5.删除触发器 存储函数也是过程式对象之一,与存储过程相似.他们都是由SQL和过程式语句组成的代码片段,并且可以从应用程序和SQL中调用.然而,他们也有一些区别: 1.存储函数没有输出参数,因为存储函数本身就是输出参数. 2.不能用CALL语句来调用存储函数. 3.存储函数必须包含一条RETURN语句,而这条特殊的SQL语句不允许包含于存储过程中 1.创建存储函数 使用CREATE FUNCTION语句创建存储

  • MySQL触发器自动智能化的数据维护

    目录 触发器介绍 触发器的特性 触发器语法 数据准备 创建触发器 触发器——执行多个触发语句 New Old 操作 查看触发器 删除触发器 总结 触发器介绍 触发器,就是一种特殊的存储过程.触发器和存储过程一样是一个能够完成特定功能.存储在数据库服务器上的SQL片段,但是触发器无需调用,当对数据库表中的数据执行DML操作时自动触发这个SQL片段的执行,无需手动条用. 在MySQL中,只有执行insert,delete,update操作时才能触发触发器的执行 触发器的这种特性可以协助应用在数据库端

  • Mysql中的触发器定义与使用

    目录 一.触发器的介绍 二.触发器的语法 (1)insert触发器 (2)update触发器 (3)delete触发器 一.触发器的介绍 触发器是与表有关的数据库对象,指在insert/update/delete 之前或之后,触发并执行 触发器中定义的SQL语句集合.触发器的这种特性可以协助应用在数据库端确保数据的 完整性,日志记录,数据校验等操作. 使用别名old和new来引用触发器中发生变化的记录内容,这与其它的数据库是相似的. 现在触发器还只支持行级触发,不支持语句级触发. 触发器类型  

  • MySQL深入浅出精讲触发器用法

    目录 前言 触发器概述 触发器的创建 代码举例1 代码举例2 代码举例3 查看删除触发器 触发器的优点 触发器的缺点 注意点 前言 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分 别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的完整性,必须同时 在库存表中添加一条库存记录. 这样一来,我们就必须把这两个关联的操作步骤写到程序里面,而且要用 事务 包裹起来,确保这两个操 作成为一个 原子操作 ,要么全部执行,要么

  • MySQL自定义函数及触发器

    目录 1. 存储函数(自定义函数) 1.1 定义存储函数 1.2 调用存储函数 1.3 删除存储函数 2. 触发器 2.1 触发器介绍 2.2 创建触发器 2.3 删除触发器 2.4 查看触发器 1. 存储函数(自定义函数) 自定义函数是一种对MySQL扩展的途径,其用法与内置的函数相同. 定义函数的两个必要条件:参数.返回值.函数可以返回任意类型的值,同样可以接收这些类型的参数. 关于函数体: 函数体是由合法的SQL语句构成. 函数体可以是简单的SELECT或INSERT语句. 函数体如果为符

  • Mysql中的触发器定义及语法介绍

    目录 1.定义: 2.语法: 3.删除触发器 4.查询触发器 5.触发器类型OLD和NEW的使用 1.定义: 触发器和存储过程相似,都是嵌入到 MySQL 中的一段程序.触发器是由事件来触发某个操作.当数据库执行这些事件时,就会激活触发器来执行相应的操作.这些事件称为触发条件,在MySQL中,有UPDATE,INSERT,和DELETE. 在MySQL中,目前只有UPDATE,INSERT,和DELETE这三种操作,才会触发触发器,其他操作都不支持触发器.这和Oracle中的触发器有很大的区别,

  • MySQL数据库的触发器和事务

    目录 一.触发器 概念 二. 触发器的操作 触发器的增删改操作 触发器的查看删除操作 三.事务 概念 四.事务的操作 基本流程 基础操作 事务的提交方式 事务的隔离级别 隔离操作 一.触发器 概念 触发器是SQL server提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,是由事件来触发.触发器经常用来加强数据的完整性约束和业务规则. 二. 触发器的操作 创建account和account_log数据表: CREATE TABLE account( id I

  • MySQL 使用触发器记录用户的操作日志问题

    目录 MySQL 使用触发器记录用户的操作日志 一.创建用户数据表(emp)和保存操作日志的表(emp_log) 二.为 emp 表创建触发器 1.创建触发器 trigger_after_insert_emp 2.创建触发器 trigger_after_update_emp 3.创建触发器 trigger_after_delete_emp 三.数据验证 1.在 emp 中添加数据记录 2.在 emp 中更新数据记录 3.在 emp 中删除数据记录 MySQL 使用触发器记录用户的操作日志 使用

  • SQL触发器定义与使用

    目录 触发器简介 触发器的创建及调用 触发器的分类及执行顺序 触发器的删除 触发器的优缺点 比如:现需要向学生表中插入新的学生数据.但在插入学生数据的时,需要同时检查老师表里的数据.如果插入学生的老师不在老师表里,则先向老师表中插入一条老师数据,再向学生表中插入学生数据. CALL sp_add_student( 'S20170091', '杨艳', '女', '2003-04-09', 15, 'G0206', 89.23, 'T0021' ); 如果有多个学生的数据需要插入,则需要多次调用该

  • SQL触发器实例讲解

    SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update , Delete 事件. 我为什么要使用触发器?比如,这么两个表: 复制代码 代码如下: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord(

  • MySQL 触发器定义与用法简单实例

    本文实例讲述了MySQL 触发器定义与用法.分享给大家供大家参考,具体如下: 语法 CREATE TRIGGER 触发器名称  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象. { BEFORE | AFTER }  --触发器有执行的时间设置:可以设置为事件发生前或后. { INSERT | UPDATE | DELETE }  --同样也能设定触发的事件:它们可以在执行insert.update或delete的过程中触发. ON 表名称

  • 在SQL触发器或存储过程中获取在程序登录的用户

    实现一个AuditLog的功能,是B/S结构专案. 每个用户可以登录系统,在程序中操作数据(添加,更新和删除)需要实现记录操作跟踪.是谁添加,更新和删除的,这些信息将会插入至AuditLog表中. 一般情况之下,在SQL的触发器中,只能取到(SQL验证sa:Windows验证Domain\xxx).这些用户名,达不到效果,不能真正反映到是谁操作的. 下面是让你清楚,怎样实现在SQL触发器或存储过程中获取在程序登录的用户,是在插入,更新或删除的存储过程,把登录程序当前用户传入进去.在存储过程中,再

  • SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用

    windows server 2019安装了SQL2016,启动sql agent代理时候,提示"尚未定义空闲cpu条件 onidle作业计划将不起任何作用",这样会导致原来设置的数据库作业无法执行 这条警告表明一个SQL Server代理设置没有配置,可能阻止某些作业运行. SSMS有日志文件查看器,切换到错误日志,展开SQL Server代理文件夹,错误日志文件夹,你会看到当前SQL Server代理的日志还有最近的日志.双击[当前](或右击选择[查看代理日志])你会看到SQL S

  • ORACLE PL/SQL 触发器编程篇介绍

    1.基本概念 两种功能:完成由数据库的完整性约束难以完成的复杂业务规则的约束:监视数据库的各种操作,实现审计功能. 触发器分为:DML触发器(对表或视图执行DML操作时触发),INSTEAD OF触发器(只定义在视图上,替代实际的操作语句),系统触发器(对数据库系统进行操作时触发,如DDL语句.启动或关闭数据库等) 触发事件: 上述触发器中括号内容都是触发事件. 触发条件: WHEN子句 触发对象:包括表.视图.模式.数据库. 触发操作:触发器自动执行的程序. 触发时机:触发器相对操作执行的时间

  • sql 触发器使用例子

    inserted,deleted是在触发器中使用的两个临时表,当执行insert操作时,在inserted中存储着当前插入的记录,在执行delete操作时,在deleted中存储着当前删除的记录,当执行update时,在inserted中存储着修改后的记录,在deleted中存储着修改前的记录. 复制代码 代码如下: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go ALTER TRIGGER [dnt_user_add] ON [dbo].[dnt_u

  • SQL Server中查看对象定义的SQL语句

    除了在SSMS中查看view,存储过程等定义,也可以使用下面的语句直接查询: 复制代码 代码如下: SELECT object_definition(object_id('sys.tables')); go sp_helptext 'sys.tables' go select * from sys.system_sql_modules whereobject_id = object_id('sys.tables') 适用于以下对象类型: ·        C = 检查约束 ·        D

随机推荐