-- 创建数据库
CREATE DATABASE db20;
-- 使用数据库
USE db20;
-- 创建账户表
CREATE TABLE accpunt(
id INT PRIMARY KEY AUTO_INCREMENT,-- 账户id
NAME VARCHAR(10),-- 姓名
money DOUBLE-- 余额
);
-- 添加数据
INSERT INTO accpunt VALUES
(NULL,'梁梁',1000),
(NULL,'小梁梁',1000);
-- 创建日志表
CREATE TABLE account_log(
id INT PRIMARY KEY AUTO_INCREMENT,-- 日志id
NAME VARCHAR(10),-- 操作类型(insert update delete)
operation_time DATETIME, -- 操作时间
operation_id INT, -- 操作表的id
operation_params VARCHAR(200) -- 操作参数
);
#----------------------------------------------------创建INSERT 触发器---------------------------------
-- 创建INSERT 触发器
DELIMITER $
CREATE TRIGGER account_insert
AFTER INSERT -- 触发器类型为 INSERT
ON
accpunt -- 表
FOR EACH ROW -- 行级触发器
BEGIN
INSERT INTO account_log VALUES
(NULL,-- 主键 id
'INSERT',-- 操作类型
NOW(),-- 操作时间
new.id,-- 插入之后的id
-- CONCAT 函数拼接 插入之后的参数
CONCAT('插入后{id = ',new.id,',name = ',new.NAME,'money = ',new.money,'}'));
END$
DELIMITER ;
#------------------------------------------------
-- 查询account 表
SELECT * FROM accpunt;
#向account表插入数据
INSERT INTO accpunt VALUES(NULL,'小小',3000);
SELECT * FROM accpunt;
-- 查询日志表
SELECT * FROM account_log;
#-----------------------------------------------------创建 UPDATE 触发器--------------------------------
-- 创建 UPDATE 触发器
DELIMITER $
CREATE TRIGGER account_update
AFTER UPDATE -- 触发器类型为 UPDATE
ON
accpunt -- 表
FOR EACH ROW -- 行级触发器
BEGIN
INSERT INTO account_log VALUES
(NULL,-- 主键 id
'INSERT',-- 操作类型
NOW(),-- 操作时间
new.id,-- 插入之后的id
-- CONCAT 函数拼接 插入之后的参数
CONCAT(
'修改前{id=',old.id,',name=',old.name,',money=',old.money,'}',
'修改后{id=',new.id,',name=',new.name,',money=',new.money,'}'));
END$
DELIMITER ;
#----------------------------------------
-- 查询account 表
SELECT * FROM accpunt;
#修改表
UPDATE accpunt SET money = 1000 WHERE id = 4;
-- 查询日志表
SELECT * FROM account_log;
#------------------------------------------------- 创建 DELETE 触发器------------------------------------
-- 创建 DELETE 触发器
DELIMITER $
CREATE TRIGGER account_delete
AFTER DELETE -- 触发器类型为 DELETE
ON
accpunt -- 表
FOR EACH ROW -- 行级触发器
BEGIN
INSERT INTO account_log VALUES
(NULL,-- 主键 id
'DELETE',-- 操作类型
NOW(),-- 操作时间
old.id,-- 插入之后的id
-- CONCAT 函数拼接 插入之后的参数
CONCAT('删除前
{id=',old.id,',name=',old.name,',money=',old.money,'}'));
END$
DELIMITER ;
#---------------------------------------
-- 查询account 表
SELECT * FROM accpunt;
-- 查询日志表
SELECT * FROM account_log;
-- 删除account 表数据
DELETE FROM accpunt WHERE id=4;
-- 查询account 表
SELECT * FROM accpunt;
-- 查询日志表
SELECT * FROM account_log;