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表:

 

 

posted @ 2021-01-18 16:24  梁永旺  阅读(37)  评论(0)    收藏  举报