我是靠谱客的博主 疯狂茉莉,最近开发中收集的这篇文章主要介绍MySQL5.7 触发器1. delimiter关键字:,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

很多时候,我们都需要在插入和删除等动作之前或之后执行数据的检查。比如:在插入学生成绩的时候,检查成绩是否在0~100这个区间。如果是就插入,不是就放弃这个操作。为了达到这个目的,我们需要建立一个触发器。


在介绍触发器的语法之前,先 介绍MySQL中的delimiter关键字。

1. delimiter关键字:

当你参考别人的触发器时,你会发现很多人会在触发器的创建语句之前加上一句:
delimiter // 
因为MySQL在分析语句的时候,遇到一个分号就解析一句,没遇到就继续往下读。上面这句的作用就是设置语句的结束标志为“//”,这样当你写触发器的时候就能用分号来分隔语句。当然在最后不要忘记了加上:
delimiter ;
还原语句的结束标志。

2. 创建触发器的语法:
CREATE
    [DEFINER = { user | CURRENT_USER }]
    TRIGGER trigger_name
    trigger_time trigger_event
    ON tbl_name FOR EACH ROW
    [trigger_order]
    trigger_body

trigger_time: { BEFORE | AFTER }

trigger_event: { INSERT | UPDATE | DELETE }

trigger_order: { FOLLOWS | PRECEDES } other_trigger_name
在触发器执行时,DEFINER子句决定了当检查访问优先权的时候被使用的上下文

trigger_name:触发器名称,用户自行指定;

trigger_time:触发器被触发的时间,值为BEFORE或者AFTER。只是行被修改之前或之后

trigger_event:指示可以被触发的操作,这些操作只能是下面几个:

INSERT:当一个新的行被插入一个表的时候。可以通过下列命令来触发:INSERT, REPLACE, LOAD DATA

UPDATE :更改某一行时激活触发器,可以通过UPDATE命令来触发
DELETE :删除某一行时激活触发器,可以通过 UPDATE 或者 REPLACE 命令来触发

tbl_name: 要添加触发器的表的名字

trigger_order:值为FOLLOWS 或者 PRECEDES 后面跟上现有的触发器的名字(注意:这两个触发器的触发条件和触发时间必须一样)。如果为FOLLOWS,这个新的触发器就会在现有的触发器之后被触发。如果为PRECEDES,就会在现有的触发器之前执行。

trigger_body:触发器的程序体

详细的官方资料:https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html


示例:

CREATE TABLE student(
    student_name varchar(10) primary key,
    score TINYINT
);
然后为这个表创建一个简单的触发器:

DELIMITER //
CREATE TRIGGER check_score BEFORE INSERT ON student FOR EACH ROW
BEGIN
    DECLARE ss TINYINT;
    SET ss = NEW.score;
    IF ss < 0 OR ss > 100 THEN
        SIGNAL SQLSTATE  '45000'  SET MESSAGE_TEXT = 'score out of range';
   END IF;
END;//
DELIMITER ;
有关SIGNAL的,可以看SIGNAL的官方文档介绍: https://dev.mysql.com/doc/refman/5.7/en/signal.html

为了在数据发生错误的之后,不执行插入操作,就需要使用SIGNAL语句或者一条运行时肯定会发生错误的语句来返回抛出异常。

如果数据没有错误,就会执行插入操作。

最后

以上就是疯狂茉莉为你收集整理的MySQL5.7 触发器1. delimiter关键字:的全部内容,希望文章能够帮你解决MySQL5.7 触发器1. delimiter关键字:所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部