時間:2022-12-06來源:www.caymanbraccottage.com作者:電腦系統城
使用 MySQL 觸發器可以記錄哪些用戶、什么時間對數據表進行了增、刪、改操作。如果執行刪除操作,則記錄刪除之前的數據記錄;如果執行更新操作,記錄更新之前的數據記錄。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
-- 創建用戶數據表: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 '員工信息數據表' ; -- 查看表結構 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) -- 創建操作日志表: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 '執行操作的用戶名稱' , `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 '員工操作日志信息表' ; -- 查看表結構 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 表中插入記錄時,把執行插入操作的用戶名、操作類型(INSERT)、操作時間以及記錄的內容添加到操作日志表(emp_log)中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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 ; |
在 emp 表中更新記錄時,把執行更新操作的用戶名、操作類型(UPDATE)、操作時間以及更新之前記錄的內容添加到操作日志表(emp_log)中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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 ; |
在 emp 表中刪除記錄時,把執行刪除操作的用戶名、操作類型(DELETE)、操作時間以及刪除之前記錄的內容添加到操作日志表(emp_log)中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
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 ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/* insert into emp(emp_name,birth,salary,comm,phone,addr) values ( '劉紅' , '1988-12-3' ,5000,1200, '13673521212' , '河南省新鄉市' ), ( '王濤' , '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' , '河南省新鄉市' ), -> ( '王濤' , '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 表中的數據 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 | 河南省新鄉市 | 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 表中的數據 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 | 河南省新鄉市 | | 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) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
-- 更新 emp 表中的數據(更新了兩條記錄) 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 表中的數據 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 | 河南省新鄉市 | 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 表中的數據 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 | 河南省新鄉市 | | 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 | 河南省新鄉市 | | 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) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
-- 刪除 emp 表中的數據(刪除了兩條記錄) mysql> delete from emp where salary = 6000; Query OK, 2 rows affected (0.02 sec) -- 查詢 emp 表中的數據 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 表中的數據 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 | 河南省新鄉市 | | 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 | 河南省新鄉市 | | 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 | 河南省新鄉市 | | 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) |
到此這篇關于MySQL 使用觸發器記錄用戶的操作日志的文章就介紹到這了
2022-12-06
MySQL數據庫的約束使用實例2022-12-06
Mysql去重的幾種方式分步講解2022-10-24
安裝MYSQL端口被占用MySQL服務器體系架構 網絡連接層 服務層 存儲引擎層 系統文件層 服務器處理客戶端請求 連接管理 解析與優化 查詢緩存 語法解析 查詢優化 存儲引擎...
2022-10-02
MySQL主從復制是一個異步的復制過程,就是有兩個數據庫服務器,一個是主(master)數據庫服務器,另一個是從(slave)數據庫服務器。...
2022-10-02