触发器
sh
# 1、建立数据库dbtest08,字符集为utf8。
CREATE DATABASE dbtest08 CHARACTER SET utf8;
# 2、切换当前数据库为dbtest08。
USE dbtest08;
# 3、创建表
CREATE TABLE test_trigger (
id INT PRIMARY KEY AUTO_INCREMENT,
t_note VARCHAR(30)
);
CREATE TABLE test_trigger_log (
id INT PRIMARY KEY AUTO_INCREMENT,
t_log VARCHAR(30)
);
# 4、创建触发器:创建名称为before_insert的触发器,向test_trigger数据表插入数据之前,向test_trigger_log数据表中插入before_insert的日志信息。
DELIMITER //
CREATE TRIGGER before_insert
BEFORE INSERT ON test_trigger
FOR EACH ROW
BEGIN
INSERT INTO test_trigger_log(t_log) VALUES(CONCAT('before insert:', new.t_note));
END //
DELIMITER ;
# 5、向test_trigger数据表中插入数据
INSERT INTO test_trigger(t_note) VALUES('Apple123');
# 6、查看test_trigger_log数据表中的数据
SELECT * FROM test_trigger;
SELECT * FROM test_trigger_log;
# 7、查看当前数据库下所有的触发器
SHOW TRIGGERS;
# 8、查看before_insert触发器的创建语句
SHOW CREATE TRIGGER before_insert;
# 9、删除before_insert触发器
DROP TRIGGER before_insert;
# 10、创建名称为after_insert的触发器,向test_trigger数据表插入数据之后,向test_trigger_log数据表中插入after_insert的日志信息。
DELIMITER //
CREATE TRIGGER after_insert
AFTER INSERT ON test_trigger
FOR EACH ROW
BEGIN
INSERT INTO test_trigger_log(t_log) VALUES(CONCAT('After insert:', new.t_note));
END //
DELIMITER ;
# 11、向test_trigger数据表中插入数据。
INSERT INTO test_trigger(t_note) VALUES('Orange345');
# 12、查看test_trigger_log数据表中的数据
SELECT * FROM test_trigger;
SELECT * FROM test_trigger_log;
# -----------------------------------------------------第二节课内容-------------------------------------------------------------
#0. 准备工作
# 导入数据库atguigudb.
# 切换当前数据库为dbtest08。
USE dbtest08;
CREATE TABLE emps
AS
SELECT employee_id,last_name,salary
FROM atguigudb.employees;
#1. 复制一张emps表的空表emps_back,只有表结构,不包含任何数据
CREATE TABLE emps_back
AS
SELECT * FROM emps WHERE FALSE;
#2. 查询emps_back表中的数据
SELECT * FROM emps_back;
#3. 创建触发器emps_insert_trigger,每当向emps表中添加一条记录时,同步将这条记录添加到emps_back表
中
DELIMITER //
CREATE TRIGGER emps_insert_trigger
AFTER INSERT ON emps
FOR EACH ROW
BEGIN
INSERT INTO emps_back VALUES(new.employee_id, new.last_name, new.salary);
END //
DELIMITER ;
#4. 验证触发器是否起作用
INSERT INTO emps VALUES(300, 'John', 6000);
SELECT * FROM emps;
SELECT * FROM emps_back;
--------------------------------------------------------------------------------------------------------------------------------
#1. 复制一张emps表的空表emps_back1,只有表结构,不包含任何数据
CREATE TABLE emps_back1
AS
SELECT * FROM emps WHERE FALSE;
#2. 查询emps_back1表中的数据
SELECT * FROM emps_back1;
#3. 创建触发器emps_del_trigger,每当向emps表中删除一条记录时,同步将删除的这条记录添加到
emps_back1表中
DELIMITER //
CREATE TRIGGER emps_del_trigger
AFTER DELETE ON emps
FOR EACH ROW
BEGIN
INSERT INTO emps_back1 VALUES(old.employee_id, old.last_name, old.salary);
END //
DELIMITER ;
#4. 验证触发器是否起作用
DELETE FROM emps WHERE employee_id < 110;
SELECT * FROM emps;
SELECT * FROM emps_back1;