MySQL——触发器

触发器,顾名思义,就是说MySQL响应一下任意语句而自动执行的一条MySQL语句(也可能位于BEGIN和END语句之间的一组语句):
1.DELETE
2.INSERT
3.UPDATE

其他MySQL语句不支持触发器。

part 1 创建触发器

在创建触发器时,我们应该给出 唯一的触发器名 ,触发器关联的表 ,触发器应该相应的活动(DELETE、INSERT、或UPDATE) ,触发器何时执行(之前 还是 之后)。 另外,特别强调,请确定触发器名的唯一,是必须在每个表中唯一,而不是在每个数据库中唯一。但是,韩式建议在数据库范围内使用唯一的触发器名。

触发器用CREATE TRIGGER 语句创建:

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 ;  

我们可以看见,上方代码创建了一个触发器,令人奇怪的是笔者的MySQL版本是5.7的,但是在使用FOR EACH ROW SELECT ‘Product added’时,会返回报错,不允许触发器返回结果集。但是我们用的例子是,MySQL书上的啊 。 费解 。

INSERT 触发器:
1.INSERT 触发器代码内 , 可用一个名为NEW的虚拟表,访问被插入的行。
2.在BEFORE INSERT 触发器中,NEW中的值也可以被更新。
3.对于 AUTO_INCREMENT列,NEW在INSERT执行之前包含0,在INSERT执行之后包含自动新的自动生成值。

DELETE触发器:
1.在DELTE触发器内你可以引用一个名为OLD的虚拟表,访问被删除的行。
2.OLD的值全部是只读地,不能更新。

UPDATE触发器:
1.在UPDATE触发器中,可以引用一个名为OLD的虚拟表访问以前的值,引用一个名为NEW的虚拟表访问更新的值。
2.在BEFORE UPDATE 触发器中,NRE中的值可能也被更新。
3.OLD的值是只读的,不能更新。

part 2 删除触发器

DROP TRIGGER XXX;

猜你喜欢

转载自blog.csdn.net/qq_36120793/article/details/78962432