触发器(trigger):监视某种情况,并触发某种操作,触发器必须有名字,最多64个字符,可能后面会附有分隔符.
它和MySQL中其他对象的命名方式基本相象
触发器创建语法四要素:1.监视地点(table) 2.监视事件DML 3.触发时间(after/before) 4.触发事件DML
{ BEFORE | AFTER } --触发器有执行的时间设置:可以设置为事件发生前或后。
{ INSERT | UPDATE | DELETE } --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发
FOR EACH ROW --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
####执行触发器建议使用ROOT的权限
####使用别名old和new,能够引用与触发程序相关的表中的列。old.col_name在更新或删除它之前,引用已有行中的1列。new.col_name在更新它之后引用将要插入的新行的1列或已有行的1
列,所以要引用update前的列就用old,要引用update后的列就用new
语法:
create trigger triggerName
after/before insert/update/delete on tableName
for each row##固定格式
begin
sql语句;
end;
##来个简单操作:
1、添加两个表:
CREATE TABLE tabA(id INT NOT NULL PRIMARY KEY,c_name VARCHAR(20));
CREATE TABLE tabB(id INT NOT NULL PRIMARY KEY,c_name VARCHAR(20));
2、创建触发器:insert
t_aferinsert_on_tabA
####
DELIMITER $$
CREATE TRIGGER test.t_aferinsert_on_taba
AFTER INSERT ON taba
FOR EACH ROW
BEGIN
INSERT INTO tabb(id,c_name) VALUES(new.id,new.c_name);
END;
$$
DELIMITER;
3、查看taba、tabb表
SELECT a.id AS aid,a.c_name acname,b.id bid,b.c_name bname FROM taba a JOIN tabb b
4、从taba表插入数据:
INSERT INTO taba(id,c_name)VALUES(1,‘test triggers‘)
SELECT a.id AS aid,a.c_name acname,b.id bid,b.c_name bname FROM taba a JOIN tabb b
##UPDATE 简单例子:
DELIMITER $$
CREATE TRIGGER t_aferupdate_on_taba
AFTER UPDATE ON taba
FOR EACH ROW
BEGIN
UPDATE tabb SET c_name=new.c_name WHERE id=new.id;
END;
$$
DELIMITER;
###DELETE:
DELIMITER $$
CREATE TRIGGER t_aferdelete_on_taba
AFTER DELETE ON taba
FOR EACH ROW
BEGIN
DELETE FROM tabb WHERE id=old.id;
END;
$$
DELIMITER;