SQL触发器定义与使用

 更新时间:2023年01月05日 16:22:03   作者:黑码哥  
SQL的触发器和存储过程一样,都是嵌入到SQL中的一段程序,是SQL中管理数据的有力工具,本文给大家详细介绍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触发器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql视图之创建可更新视图的方法详解

    mysql视图之创建可更新视图的方法详解

    这篇文章主要介绍了mysql视图之创建可更新视图的方法,结合实例形式分析了mysql可更新视图的具体创建、使用方法及相关操作注意事项,需要的朋友可以参考下
    2019-12-12
  • MySQL主从状态检查的实现

    MySQL主从状态检查的实现

    这篇文章主要介绍了MySQL主从状态检查的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 详解MySQL高可用MMM搭建方案及架构原理

    详解MySQL高可用MMM搭建方案及架构原理

    本篇文章主要介绍搭建MMM方案以及MMM架构的原理。这里不介绍主从、主主的搭建方法,MMM方案不适用对数据一致性要求很高的业务。下面一起来学习学习。
    2016-08-08
  • 数据库报错:Unknown column 'xxx' in 'where clause'问题的解决过程

    数据库报错:Unknown column 'xxx' in 

    但凡写过sql语句的人估计都曾经碰到过类似于Unknown column ‘xxx’ in ‘where clause’的问题,这篇文章主要给大家介绍了关于数据库报错:Unknown column 'xxx' in 'where clause'问题的解决过程,需要的朋友可以参考下
    2023-03-03
  • EXCEL数据上传到SQL SERVER中的简单实现方法

    EXCEL数据上传到SQL SERVER中的简单实现方法

    以下是对EXCEL数据上传到SQL SERVER中的简单实现方法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • mysql数据插入效率比较

    mysql数据插入效率比较

    今天小编就为大家分享一篇关于mysql数据插入效率比较,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • SQL模糊查询报:ORA-00909:参数个数无效问题的解决

    SQL模糊查询报:ORA-00909:参数个数无效问题的解决

    这篇文章主要介绍了SQL模糊查询报:ORA-00909:参数个数无效问题的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • MySQL 数据类型及最优选取规则

    MySQL 数据类型及最优选取规则

    这篇文章主要介绍了MySQL 数据类型及最优选取规则,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-08-08
  • MySQL数据库优化的六种方式总结

    MySQL数据库优化的六种方式总结

    关于数据库优化,网上有不少资料和方法,但是不少质量参差不齐,所以下面这篇文章主要给大家介绍了关于MySQL数据库优化的六种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-01-01
  • 正确理解Mysql中的列索引和多列索引

    正确理解Mysql中的列索引和多列索引

    本篇文章是对Mysql中的列索引和多列索引进行了详细的分析介绍,需要的朋友参考下
    2013-06-06

最新评论