广告位联系
返回顶部
分享到

SQL触发器定义与使用介绍

Mysql 来源:互联网 作者:佚名 发布时间:2024-02-13 20:49:28 人浏览
摘要

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

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

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语言的功能和灵活性;

缺点:

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

版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • mysql中TINYINT取值范围的介绍

    mysql中TINYINT取值范围的介绍
    项目场景: 最近在开发过程中,看见表设计中是thinyint字段,但对于它的范围产生了好奇 问题描述: 当我们填写超过128数值的时候,该字段
  • SQL触发器定义与使用介绍
    比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,
  • Window环境下MySQL UDF提权介绍

    Window环境下MySQL UDF提权介绍
    UDF(Userdefined function)可以翻译为用户自定义函数,其为mysql的一个拓展接口,可以为Mysql增添一些函数,对MySQL的功能进行扩充,然后就可以在
  • 华为云云数据库MySQL的体验流程介绍

    华为云云数据库MySQL的体验流程介绍
    一、MySQL相关概念 1.什么是MySQL MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于Oracle旗下产品。MySQL是最流行的关系型数据库
  • Mysql tinyint(1)与tinyint(4)的区别介绍
    什么是tinyint(M)? 先来了解下mysql中字符串类型varchar(M)和数值类型tinyint(M)的区别? 字符串列类型:varchar(M)而言,M是字段中可以存储的最大字
  • MySQL实现数据批量更新功能介绍
    根据不同条件批量更新同一值 这种场景直接通过update语句更新即可,如: 1 UPDATE t_sys_user SET `desc` = CaseWhen-0 WHERE id IN (1001,1002,1003); 根据不同
  • MySQL不用like+%实现模糊查询介绍

    MySQL不用like+%实现模糊查询介绍
    一、前言 我们都知道 InnoDB 在模糊查询数据时使用 %xx 会导致索引失效,但有时需求就是如此,类似这样的需求还有很多,例如,搜索引擎需
  • SQL触发器定义与使用
    比如:现需要向学生表中插入新的学生数据。但在插入学生数据的时,需要同时检查老师表里的数据。如果插入学生的老师不在老师表里,
  • 在MySQL数据库中支持完整的Unicode的方法
    在你的数据库中使用 MySQL 的 utf8 字符集吗? 在这篇文章中,我将解释为什么你应该改用 utf8mb4,以及如何去做。 UTF-8 UTF-8编码可以表示Uni
  • mysql之查找所有数据库中没有主键的表问题
    查找所有数据库中没有主键的表 1 2 3 4 5 6 7 select table_schema,table_name from information_schema.tables where (table_schema,table_name) not in( select distinct table_
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计