Skip to content

触发器

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;