招聘网站制作公司,wordpress用户中心汉化,希爱力的作用与功效,济宁企业网站建设原文地址#xff1a;https://www.cnblogs.com/zyshi/p/6618839.html
---------------------------------------------------------什么是触发器
简单的说#xff0c;就是一张表发生了某件事#xff08;插入、删除、更新操作#xff09;#xff0c;然后自动触发了预先编写好…原文地址https://www.cnblogs.com/zyshi/p/6618839.html
---------------------------------------------------------什么是触发器
简单的说就是一张表发生了某件事插入、删除、更新操作然后自动触发了预先编写好的若干条SQL语句的执行特点及作用
特点触发事件的操作和触发器里的SQL语句是一个事务操作具有原子性,要么全部执行要么都不执行
作用保证数据的完整性起到约束的作用例子创建触发器记录表的增、删、改操作记录
接下来将创建user和user_history表以及三个触发器tri_insert_user、tri_update_user、tri_delete_user分别对应user表的增、删、改三件事
创建user表
DROP TABLE IF EXISTS user;
CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT,account varchar(255) DEFAULT NULL,name varchar(255) DEFAULT NULL,address varchar(255) DEFAULT NULL,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8;创建对user表操作历史表
DROP TABLE IF EXISTS user_history;
CREATE TABLE user_history (id bigint(20) NOT NULL AUTO_INCREMENT,user_id bigint(20) NOT NULL,operatetype varchar(200) NOT NULL,operatetime datetime NOT NULL,PRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8;创建user表插入事件对应的触发器tri_insert_user
几点说明
DELIMITER改变输入的结束符默认情况下输入结束符是分号;这里把它改成了两个分号;;这样做的目的是把多条含分号的语句做个封装全部输入完之后一起执行而不是一遇到默认的分号结束符就自动执行
new当触发插入和更新事件时可用指向的是被操作的记录
old 当触发删除和更新事件时可用指向的是被操作的记录
DROP TRIGGER IF EXISTS tri_insert_user;
DELIMITER ;;
CREATE TRIGGER tri_insert_user AFTER INSERT ON user FOR EACH ROW beginINSERT INTO user_history(user_id, operatetype, operatetime) VALUES (new.id, add a user, now());
end
;;
DELIMITER ;创建user表更新事件对应的触发器tri_update_user
DROP TRIGGER IF EXISTS tri_update_user;
DELIMITER ;;
CREATE TRIGGER tri_update_user AFTER UPDATE ON user FOR EACH ROW beginINSERT INTO user_history(user_id,operatetype, operatetime) VALUES (new.id, update a user, now());
end
;;
DELIMITER ;创建user表删除事件对应的触发器tri_delete_user
DROP TRIGGER IF EXISTS tri_delete_user;
DELIMITER ;;
CREATE TRIGGER tri_delete_user AFTER DELETE ON user FOR EACH ROW beginINSERT INTO user_history(user_id, operatetype, operatetime) VALUES (old.id, delete a user, now());
end
;;
DELIMITER ;至此全部表及触发器创建完成开始验证结果分别做插入、修改、删除事件执行以下语句观察user_history是否自动产生操作记录
INSERT INTO user(account, name, address) VALUES (user1, user1, user1);
INSERT INTO user(account, name, address) VALUES (user2, user2, user2);UPDATE user SET name user3, account user3, addressuser3 where nameuser1;DELETE FROM user where name user2;观察结果user表和user_history表的结果操作记录已产生说明触发器工作正常弊端
增加程序的复杂度有些业务逻辑在代码中处理有些业务逻辑用触发器处理会使后期维护变得困难