mysql触发器
mysql触发器
trigger 当一件事发生了,会引发另外的一件事发生,我们称之为触发器。
在mysql里触发器就是,当我们对一张表操作时,会触发对其他表相关的一些
操作。mysql是一个关系型数据库,表和表之间是由联系的,当我修改一张表是,也希望
另一张表做相应的修改。
drop trigger if exists x1;
delimiter //
create trigger 触发器名字 before|after 事件(insert|update|delete) on表1
for each row
begin
sql语句 表2
end //
delimiter ;
详细资料:https://www.cnblogs.com/phpper/p/7587031.html
DROP TRIGGER IF EXISTS x1; DELIMITER // CREATE TRIGGER x1 AFTER UPDATE ON a FOR EACH ROW BEGIN UPDATE bb SET rhce=400 WHERE id =1; END// DELIMITER ;
CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt trigger_name:触发器的名称 tirgger_time:触发时机,为BEFORE或者AFTER trigger_event:触发事件,为INSERT、DELETE或者UPDATE tb_name:表示建立触发器的表明,就是在哪张表上建立触发器 trigger_stmt:触发器的程序体,可以是一条SQL语句或者是用BEGIN和END包含的多条语句 所以可以说MySQL创建以下六种触发器: BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE AFTER INSERT,AFTER DELETE,AFTER UPDATE
BEFORE和AFTER参数指定了触发执行的时间,在事件之前或是之后
FOR EACH ROW表示任何一条记录上的操作满足触发事件都会触发该触发器
CREATE TABLE users( id INT AUTO_INCREMENT, NAME VARCHAR(20), add_time DATE, PRIMARY KEY(id) ); CREATE TABLE `logs`( id INT AUTO_INCREMENT, `log` VARCHAR(255) COMMENT '日志说明', PRIMARY KEY(id) ) DELIMITER // CREATE TRIGGER user_log AFTER INSERT ON users FOR EACH ROW BEGIN DECLARE s1 VARCHAR(40)CHARACTER SET utf8; DECLARE s2 VARCHAR(20) CHARACTER SET utf8;#后面发现中文字符编码出现乱码,这里设置字符集 SET s2 = " is created"; SET s1 = CONCAT(NEW.name,s2); #函数CONCAT可以将字符串连接 INSERT INTO LOGS(LOG) VALUES(s1); END// INSERT INTO users(NAME,add_time) VALUES('tom',NOW());
users表:
log表: