MySQL?使用觸發(fā)器記錄用戶的操作日志問題
MySQL 使用觸發(fā)器記錄用戶的操作日志
使用 MySQL 觸發(fā)器可以記錄哪些用戶、什么時間對數(shù)據(jù)表進行了增、刪、改操作。如果執(zhí)行刪除操作,則記錄刪除之前的數(shù)據(jù)記錄;如果執(zhí)行更新操作,記錄更新之前的數(shù)據(jù)記錄。
一、創(chuàng)建用戶數(shù)據(jù)表(emp)和保存操作日志的表(emp_log)
-- 創(chuàng)建用戶數(shù)據(jù)表:emp
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`emp_id` int(11) AUTO_INCREMENT COMMENT '員工id',
`emp_name` char(50) NOT NULL DEFAULT '' COMMENT '員工姓名',
`birth` date COMMENT '出生日期',
`salary` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '工資',
`comm` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '獎金',
`phone` char(20) NOT NULL DEFAULT '' COMMENT '電話',
`addr` varchar(200) NOT NULL DEFAULT '' COMMENT '地址',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP comment '插入記錄的時間',
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '最后更新記錄的時間',
PRIMARY KEY (`emp_id`),
KEY `idx_empname` (`emp_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '員工信息數(shù)據(jù)表';
-- 查看表結(jié)構(gòu)
mysql> desc emp;
+------------+---------------+------+-----+-------------------+------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+-------------------+------------------------+
| emp_id | int(11) | NO | PRI | NULL | auto_increment |
| emp_name | char(50) | NO | MUL | | |
| birth | date | YES | | NULL | |
| salary | decimal(10,2) | NO | | 0.00 | |
| comm | decimal(10,2) | NO | | 0.00 | |
| phone | char(20) | NO | | | |
| addr | varchar(200) | NO | | | |
| created_at | timestamp | NO | | CURRENT_TIMESTAMP | |
| updated_at | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+------------+---------------+------+-----+-------------------+------------------------+
9 rows in set (0.00 sec)
-- 創(chuàng)建操作日志表:emp_log
DROP TABLE IF EXISTS `emp_log`;
CREATE TABLE `emp_log` (
`emplog_id` int(11) AUTO_INCREMENT COMMENT '操作日志id',
`operate_type` char(20) COMMENT '操作類型:insert(插入)、delete(刪除)、update(更新)',
`operate_user` char(50) COMMENT '執(zhí)行操作的用戶名稱',
`operate_time` datetime COMMENT '操作時間',
`emp_id` int(11) COMMENT '員工id',
`emp_name` char(50) COMMENT '員工姓名',
`birth` date COMMENT '出生日期',
`salary` decimal(10,2) COMMENT '工資',
`comm` decimal(10,2) COMMENT '獎金',
`phone` char(20) COMMENT '電話',
`addr` varchar(200) COMMENT '地址',
PRIMARY KEY (`emplog_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT '員工操作日志信息表';
-- 查看表結(jié)構(gòu)
mysql> desc emp_log;
+--------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------+------+-----+---------+----------------+
| emplog_id | int(11) | NO | PRI | NULL | auto_increment |
| operate_type | char(20) | YES | | NULL | |
| operate_user | char(50) | YES | | NULL | |
| operate_time | datetime | YES | | NULL | |
| emp_id | int(11) | YES | | NULL | |
| emp_name | char(50) | YES | | NULL | |
| birth | date | YES | | NULL | |
| salary | decimal(10,2) | YES | | NULL | |
| comm | decimal(10,2) | YES | | NULL | |
| phone | char(20) | YES | | NULL | |
| addr | varchar(200) | YES | | NULL | |
+--------------+---------------+------+-----+---------+----------------+
11 rows in set (0.01 sec)
二、為 emp 表創(chuàng)建觸發(fā)器
1、創(chuàng)建觸發(fā)器 trigger_after_insert_emp
在 emp 表中插入記錄時,把執(zhí)行插入操作的用戶名、操作類型(INSERT)、操作時間以及記錄的內(nèi)容添加到操作日志表(emp_log)中。
DROP TRIGGER IF EXISTS `trigger_after_insert_emp`;
delimiter //
create trigger trigger_after_insert_emp
after insert on emp
for each row
begin
insert into emp_log(
operate_type,
operate_user,
operate_time,
emp_id,
emp_name,
birth,
salary,
comm,
phone,
addr
)
values(
'INSERT',
user(),
now(),
new.emp_id,
new.emp_name,
new.birth,
new.salary,
new.comm,
new.phone,
new.addr
);
end //
delimiter ;
2、創(chuàng)建觸發(fā)器 trigger_after_update_emp
在 emp 表中更新記錄時,把執(zhí)行更新操作的用戶名、操作類型(UPDATE)、操作時間以及更新之前記錄的內(nèi)容添加到操作日志表(emp_log)中。
DROP TRIGGER IF EXISTS `trigger_after_update_emp`;
delimiter //
create trigger trigger_after_update_emp
after update on emp
for each row
begin
insert into emp_log(
operate_type,
operate_user,
operate_time,
emp_id,
emp_name,
birth,
salary,
comm,
phone,
addr
)
values(
'UPDATE',
user(),
now(),
old.emp_id,
old.emp_name,
old.birth,
old.salary,
old.comm,
old.phone,
old.addr
);
end //
delimiter ;
3、創(chuàng)建觸發(fā)器 trigger_after_delete_emp
在 emp 表中刪除記錄時,把執(zhí)行刪除操作的用戶名、操作類型(DELETE)、操作時間以及刪除之前記錄的內(nèi)容添加到操作日志表(emp_log)中。
DROP TRIGGER IF EXISTS `trigger_after_delete_emp`;
delimiter //
create trigger trigger_after_delete_emp
after delete on emp
for each row
begin
insert into emp_log(
operate_type,
operate_user,
operate_time,
emp_id,
emp_name,
birth,
salary,
comm,
phone,
addr
)
values(
'DELETE',
user(),
now(),
old.emp_id,
old.emp_name,
old.birth,
old.salary,
old.comm,
old.phone,
old.addr
);
end //
delimiter ;
三、數(shù)據(jù)驗證
1、在 emp 中添加數(shù)據(jù)記錄
/*
insert into emp(emp_name,birth,salary,comm,phone,addr)
values('劉紅','1988-12-3',5000,1200,'13673521212','河南省新鄉(xiāng)市'),
('王濤','1984-8-21',6000,700,'13755440012','河南省鄭州市'),
('張靜','1992-10-31',5500,800,'13073526644','河南省安陽市');
*/
mysql> insert into emp(emp_name,birth,salary,comm,phone,addr)
-> values('劉紅','1988-12-3',5000,1200,'13673521212','河南省新鄉(xiāng)市'),
-> ('王濤','1984-8-21',6000,700,'13755440012','河南省鄭州市'),
-> ('張靜','1992-10-31',5500,800,'13073526644','河南省安陽市');
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
-- 查詢 emp 表中的數(shù)據(jù)
mysql> select * from emp;
+--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+
| emp_id | emp_name | birth | salary | comm | phone | addr | created_at | updated_at |
+--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+
| 1 | 劉紅 | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新鄉(xiāng)市 | 2022-12-04 15:40:08 | 2022-12-04 15:40:08 |
| 2 | 王濤 | 1984-08-21 | 6000.00 | 700.00 | 13755440012 | 河南省鄭州市 | 2022-12-04 15:40:08 | 2022-12-04 15:40:08 |
| 3 | 張靜 | 1992-10-31 | 5500.00 | 800.00 | 13073526644 | 河南省安陽市 | 2022-12-04 15:40:08 | 2022-12-04 15:40:08 |
+--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+
3 rows in set (0.00 sec)
-- 查詢 emp_log 表中的數(shù)據(jù)
mysql> select * from emp_log;
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
| emplog_id | operate_type | operate_user | operate_time | emp_id | emp_name | birth | salary | comm | phone | addr |
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
| 1 | INSERT | root@localhost | 2022-12-04 15:40:08 | 1 | 劉紅 | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新鄉(xiāng)市 |
| 2 | INSERT | root@localhost | 2022-12-04 15:40:08 | 2 | 王濤 | 1984-08-21 | 6000.00 | 700.00 | 13755440012 | 河南省鄭州市 |
| 3 | INSERT | root@localhost | 2022-12-04 15:40:08 | 3 | 張靜 | 1992-10-31 | 5500.00 | 800.00 | 13073526644 | 河南省安陽市 |
+-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+
3 rows in set (0.01 sec)
2、在 emp 中更新數(shù)據(jù)記錄
-- 更新 emp 表中的數(shù)據(jù)(更新了兩條記錄) mysql> update emp set salary = salary + 1000 where salary < 6000; Query OK, 2 rows affected (0.01 sec) Rows matched: 2 Changed: 2 Warnings: 0 -- 查詢 emp 表中的數(shù)據(jù) mysql> select * from emp; +--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+ | emp_id | emp_name | birth | salary | comm | phone | addr | created_at | updated_at | +--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+ | 1 | 劉紅 | 1988-12-03 | 6000.00 | 1200.00 | 13673521212 | 河南省新鄉(xiāng)市 | 2022-12-04 15:40:08 | 2022-12-04 15:47:56 | | 2 | 王濤 | 1984-08-21 | 6000.00 | 700.00 | 13755440012 | 河南省鄭州市 | 2022-12-04 15:40:08 | 2022-12-04 15:40:08 | | 3 | 張靜 | 1992-10-31 | 6500.00 | 800.00 | 13073526644 | 河南省安陽市 | 2022-12-04 15:40:08 | 2022-12-04 15:47:56 | +--------+----------+------------+---------+---------+-------------+--------------------+---------------------+---------------------+ 3 rows in set (0.00 sec) -- 查詢 emp_log 表中的數(shù)據(jù) mysql> select * from emp_log; +-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+ | emplog_id | operate_type | operate_user | operate_time | emp_id | emp_name | birth | salary | comm | phone | addr | +-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+ | 1 | INSERT | root@localhost | 2022-12-04 15:40:08 | 1 | 劉紅 | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新鄉(xiāng)市 | | 2 | INSERT | root@localhost | 2022-12-04 15:40:08 | 2 | 王濤 | 1984-08-21 | 6000.00 | 700.00 | 13755440012 | 河南省鄭州市 | | 3 | INSERT | root@localhost | 2022-12-04 15:40:08 | 3 | 張靜 | 1992-10-31 | 5500.00 | 800.00 | 13073526644 | 河南省安陽市 | | 4 | UPDATE | root@localhost | 2022-12-04 15:47:56 | 1 | 劉紅 | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新鄉(xiāng)市 | | 5 | UPDATE | root@localhost | 2022-12-04 15:47:56 | 3 | 張靜 | 1992-10-31 | 5500.00 | 800.00 | 13073526644 | 河南省安陽市 | +-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+ 5 rows in set (0.01 sec)
3、在 emp 中刪除數(shù)據(jù)記錄
-- 刪除 emp 表中的數(shù)據(jù)(刪除了兩條記錄) mysql> delete from emp where salary = 6000; Query OK, 2 rows affected (0.02 sec) -- 查詢 emp 表中的數(shù)據(jù) mysql> select * from emp; +--------+----------+------------+---------+--------+-------------+--------------------+---------------------+---------------------+ | emp_id | emp_name | birth | salary | comm | phone | addr | created_at | updated_at | +--------+----------+------------+---------+--------+-------------+--------------------+---------------------+---------------------+ | 3 | 張靜 | 1992-10-31 | 6500.00 | 800.00 | 13073526644 | 河南省安陽市 | 2022-12-04 15:40:08 | 2022-12-04 15:47:56 | +--------+----------+------------+---------+--------+-------------+--------------------+---------------------+---------------------+ 1 row in set (0.00 sec) -- 查詢 emp_log 表中的數(shù)據(jù) mysql> select * from emp_log; +-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+ | emplog_id | operate_type | operate_user | operate_time | emp_id | emp_name | birth | salary | comm | phone | addr | +-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+ | 1 | INSERT | root@localhost | 2022-12-04 15:40:08 | 1 | 劉紅 | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新鄉(xiāng)市 | | 2 | INSERT | root@localhost | 2022-12-04 15:40:08 | 2 | 王濤 | 1984-08-21 | 6000.00 | 700.00 | 13755440012 | 河南省鄭州市 | | 3 | INSERT | root@localhost | 2022-12-04 15:40:08 | 3 | 張靜 | 1992-10-31 | 5500.00 | 800.00 | 13073526644 | 河南省安陽市 | | 4 | UPDATE | root@localhost | 2022-12-04 15:47:56 | 1 | 劉紅 | 1988-12-03 | 5000.00 | 1200.00 | 13673521212 | 河南省新鄉(xiāng)市 | | 5 | UPDATE | root@localhost | 2022-12-04 15:47:56 | 3 | 張靜 | 1992-10-31 | 5500.00 | 800.00 | 13073526644 | 河南省安陽市 | | 6 | DELETE | root@localhost | 2022-12-04 15:52:21 | 1 | 劉紅 | 1988-12-03 | 6000.00 | 1200.00 | 13673521212 | 河南省新鄉(xiāng)市 | | 7 | DELETE | root@localhost | 2022-12-04 15:52:21 | 2 | 王濤 | 1984-08-21 | 6000.00 | 700.00 | 13755440012 | 河南省鄭州市 | +-----------+--------------+----------------+---------------------+--------+----------+------------+---------+---------+-------------+--------------------+ 7 rows in set (0.00 sec)
到此這篇關(guān)于MySQL 使用觸發(fā)器記錄用戶的操作日志的文章就介紹到這了,更多相關(guān)mysql記錄用戶的操作日志內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql數(shù)據(jù)庫備份及恢復(fù)命令 mysqldump,source的用法
mysql數(shù)據(jù)庫備份及恢復(fù)命令 mysqldump,source的用法,需要的朋友可以參考下。2011-02-02
MySQL?數(shù)據(jù)庫的約束及數(shù)據(jù)表的設(shè)計原理
這篇文章主要介紹了MySQL?數(shù)據(jù)庫的約束及數(shù)據(jù)表的設(shè)計原理,數(shù)據(jù)庫中的約束即是對插入數(shù)據(jù)庫中的數(shù)據(jù)進行限定,為了保證數(shù)據(jù)的有效性和完整性,下面一起來了解具體的詳細內(nèi)容,需要的小伙伴可以參考一下2021-12-12
percona-toolkit對MySQL的復(fù)制和監(jiān)控類操作教程
這篇文章主要介紹了使用percona-toolkit對MySQL進行復(fù)制和監(jiān)控類操作的教程,percona-toolkit是一款強大的MySQL輔助軟件,需要的朋友可以參考下2015-11-11
學(xué)習(xí)mysql?如何行轉(zhuǎn)列與列傳行
這篇文章主要介紹了mysql行轉(zhuǎn)列與列傳行的使用方法,幫助大家更好的理解和學(xué)習(xí)MySQL的使用,語句不難,但有一定的知識參考價值,需要的朋友可以參考一下,希望給你的學(xué)習(xí)帶來幫助2022-02-02
mysql之key和index的區(qū)別及創(chuàng)建刪除索引方式
這篇文章主要介紹了mysql之key和index的區(qū)別及創(chuàng)建刪除索引方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
MySQL查看event執(zhí)行記錄的實現(xiàn)
在使用EVENT的過程中,我們可能會需要查看EVENT的執(zhí)行記錄,以便了解它們是否按預(yù)期執(zhí)行,本文就來介紹一下MySQL查看event執(zhí)行記錄的實現(xiàn),感興趣的可以了解一下2023-11-11

