触发器概念:
1.触发器是与表有关的数据库对象
2.它可以在 insert、update、delete 之前或之后触发并执行触发器中定义的 SQL 语句
3.触发器的这种特性可以协助应用系统在数据库端确保数据的完整性、日志记录、数据校验等操作
4.使用别名 NEW 和 OLD 来引用触发器中发生变化的内容记录
触发器分类:


定义student数据表的增删改的触发器
一、准备数据
-- 1.1创建学生表
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT, -- 学生id
NAME VARCHAR(20), -- 学生姓名
age INT, -- 学生年龄
gender VARCHAR(5), -- 学生性别
score INT -- 学生成绩
);
-- 1.1.1添加数据
INSERT INTO student VALUES (NULL,'张三',23,'男',95),(NULL,'李四',24,'男',98),
(NULL,'王五',25,'女',100),(NULL,'赵六',26,'女',90);
-- 1.2创建日志表student_log
CREATE TABLE student_log(
id INT PRIMARY KEY AUTO_INCREMENT, -- 日志id
operation VARCHAR(20), -- 操作类型 (insert update delete)
operation_time DATETIME, -- 操作时间
operation_id INT, -- 操作表的id
operation_params VARCHAR(200) -- 操作参数
);

1.2.1添加触发器,关联学生日志表格
-- 1.2.1.1增加触发器
DELIMITER $
CREATE TRIGGER student_insert
AFTER INSERT ON student FOR EACH ROW
BEGIN
INSERT INTO student_log VALUES
(NULL,'INSERT',NOW(),new.id,CONCAT(
"插入后{id=',new.id,',name=',new.name,',age=',new.age,',gender=',new.gender,',score=',new.score,'}"));
END$
DELIMITER ;
-- 1.2.1.2删除触发器
DELIMITER $
CREATE TRIGGER student_delete
AFTER DELETE
ON student
FOR EACH ROW
BEGIN
INSERT INTO student_log VALUES
(NULL,'delete',NOW(),old.id,CONCAT(
'删除前{id=',old.id,',name=',old.name,',age=',old.age,',gender=',old.gender,',score=',old.score,'}'));
END$
DELIMITER ;
-- 1.2.1.3修改触发器
DELIMITER $
CREATE TRIGGER student_update
AFTER UPDATE
ON student
FOR EACH ROW
BEGIN
INSERT INTO student_log VALUES
(NULL,'update',NOW(),new.id,CONCAT(
'修改前{id=',old.id,',name=',old.name,',age=',old.age,',gender=',old.gender,',score=',old.score,'}',
'修改后{id=',new.id,',name=',new.name,',age=',new.age,',gender=',new.gender,',score=',new.score,'}'));
END $
DELIMITER ;
二、增删改,测试触发器性能
-- 新增2条学生信息
SELECT * FROM student;
INSERT INTO student VALUES (NULL,"张峰",28,"男",59);
INSERT INTO student VALUES (NULL,"马东",18,"女",99);
SELECT * FROM student_log;
-- 删除id为2的学生信息
DELETE FROM student WHERE id=2;
SELECT * FROM student_log;
-- 修改id为6的学生信息
UPDATE student SET NAME="夏远",age=34,gender="男" WHERE id =6;
SELECT * FROM student_log;


网友评论