关于SQL触发器定义与使用浅谈

本文详细介绍了SQL触发器,它是与表操作有关的数据库对象,当表上出现指定事件时会自动执行。文中阐述了触发器的创建、调用、分类、执行顺序、删除方法,还分析了其优缺点,如自动触发、保证数据完整性,但开发调试困难、可移植性差。

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

 

SQL的触发器和存储过程一样,都是嵌入到SQL中的一段程序,是SQL中管理数据的有力工具,本文给大家详细介绍SQL触发器的定义语法知识,感兴趣的朋友一起看看吧

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

1

2

3

4

CALL sp_add_student(

'S20170091', '杨艳', '女', '2003-04-09',

15, 'G0206', 89.23, 'T0021'

);

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

触发器简介

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

触发器的创建及调用

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

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

1

2

3

4

5

6

7

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;

1

2

3

4

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触发器定义与使用的文章就介绍到这了,希望可以帮到你

转自:微点阅读   https://www.weidianyuedu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值