触发器
触发器
触发器是是在执行insert,update,delete语句时自动执行存储过程的过程。
注意:触发器与select无关,只与insert,update,delete有关。它是自动执行的。
insert,update,delete的执行原理
- insert语句是在执行时直接向表中添加一条记录。当执行insert触发器时,触发器本身会创建一张临时的表,该表名称叫做NEW。
- delete语句是在执行时直接将表中的数据删除。当执行delete触发器时,触发器本身会创建一张临时的表,该表名称叫做OLD。
- update语句在执行时先执行delete语句,在执行insert语句。当执行update触发器时,触发器本身会创建两张临时的表,这两张表的名字分别叫做OLD和NEW。
触发器执行的时机
可以在语句执行前触发(before触发),也可以在语句执行后触发(after触发)。
例子:在userinfo表中定义一个触发器,同时向userdetail表添加记录。
-
创建userdetail表
CREATE TABLE userdetail ( id INT PRIMARY KEY, tel VARCHAR(50), gender VARCHAR(50) )
ALTER TABLRE userdetail ADD CONSTRAINT fk_userinfo_userdetail FOREIGN KEY(id) REFERENCES userinfo(id);
-
触发器
DELIMITER $$ CREATE TRIGGER trRegiserUserDetail AFTER INSERT ON userinfo FOR EACH ROW BEGIN INSERT INTO userdetail(id)VALUES(NEW.id); END $$
-
测试
INSERT INTO userinfo(username,userpass,state)VALUES('a','a',0)
触发器的优缺点
优点:简化代码,自动执行
缺点:换库时需要重新定义。