如何在 table 中存储用户操作(完成的查询)?
How to store users action (finished queries) in a table?
所以这是我的情况:
我有一个管理员用户,可以添加、删除和编辑其他用户。我正在寻找一种如何记录管理员操作的解决方案。我是否应该比较查询完成前后受影响的 table,以及如何将差异存储在另一个 table 中?
这是将受到影响的 table:
TABLE `t_user` (
`user_id` int(11) NOT NULL,
`username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` char(32) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`active` tinyint(1) NOT NULL,
`current_desk_book` int(11) NOT NULL,
`last_login` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
假设管理员尝试删除 id=3
的用户,查询将是
"DELETE FROM t_user WHERE user_id= 3"
这些是已删除的用户数据:
(3, 'user3', 'fa6daddc77ac9b5ee42ffd31e7d6e014', 'user3@mail.bg', '2016-09-08 11:29:38', 1, 1, NULL)
我希望将 "Deleted " + 已删除的用户数据存储在另一个 table 中。
为什么要存入数据库?任何具体要求。通常人们将这些信息存储在日志(文件)中。我建议除了删除使用数据外,您还应该存储他执行的查询,这将帮助您以更好的方式跟踪事情。
要存储不同你可以尝试这样的事情 - 每当他执行带有 where
子句的命令时你用该子句执行 select
语句并将其存储在日志中并在他的之后再次重复命令执行完成,但 delete
情况除外。
两种方式:
简单的解决方案,最好有一个标记为 "deleted" 并将其标记为“1”,管理员将其删除。这是软删除方法。
硬删除:创建类似于基本用户 table 的日志 table。
有一个触发器,当删除发生时。将其存储到另一个 table。
CREATE TRIGGER log_user_delete AFTER DELETE on users
FOR EACH ROW
BEGIN
INSERT INTO users_log (user_id, username, etc, deletedby_newfield, deletedtime_newfield) values (old.user_id, old.username, '1', NOW());
END
所以这是我的情况: 我有一个管理员用户,可以添加、删除和编辑其他用户。我正在寻找一种如何记录管理员操作的解决方案。我是否应该比较查询完成前后受影响的 table,以及如何将差异存储在另一个 table 中?
这是将受到影响的 table:
TABLE `t_user` (
`user_id` int(11) NOT NULL,
`username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password` char(32) COLLATE utf8_unicode_ci NOT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`active` tinyint(1) NOT NULL,
`current_desk_book` int(11) NOT NULL,
`last_login` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
假设管理员尝试删除 id=3
的用户,查询将是
"DELETE FROM t_user WHERE user_id= 3"
这些是已删除的用户数据:
(3, 'user3', 'fa6daddc77ac9b5ee42ffd31e7d6e014', 'user3@mail.bg', '2016-09-08 11:29:38', 1, 1, NULL)
我希望将 "Deleted " + 已删除的用户数据存储在另一个 table 中。
为什么要存入数据库?任何具体要求。通常人们将这些信息存储在日志(文件)中。我建议除了删除使用数据外,您还应该存储他执行的查询,这将帮助您以更好的方式跟踪事情。
要存储不同你可以尝试这样的事情 - 每当他执行带有 where
子句的命令时你用该子句执行 select
语句并将其存储在日志中并在他的之后再次重复命令执行完成,但 delete
情况除外。
两种方式: 简单的解决方案,最好有一个标记为 "deleted" 并将其标记为“1”,管理员将其删除。这是软删除方法。
硬删除:创建类似于基本用户 table 的日志 table。 有一个触发器,当删除发生时。将其存储到另一个 table。
CREATE TRIGGER log_user_delete AFTER DELETE on users FOR EACH ROW BEGIN INSERT INTO users_log (user_id, username, etc, deletedby_newfield, deletedtime_newfield) values (old.user_id, old.username, '1', NOW()); END