触发器,顾名思义,就是说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;