如何在表中存储用户操作(已完成的查询)


How to store users action (finished queries) in a 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)

我希望存储"已删除"+已删除的用户数据在另一个表。

两种方式:简单的解决方案,最好有一个标志为"已删除",并将其标记为"1"。这是软删除方法。

Hard Delete:创建类似于base users表的日志表。有一个触发器,当删除发生时。将其存储到另一个表中。<>之前创建触发器log_user_delete后,删除用户对于每一行开始INSERT INTO users_log (user_id, username, etc, deletedby_newfield, deletedtime_newfield) values(旧)user_id,老了。username, '1', NOW());结束

为什么要将其存储在数据库中?任何特定的需求。通常人们将这些信息存储在日志(文件)中。我建议,除了删除的使用数据,还应该存储他执行的查询,这将帮助您以更好的方式跟踪事情。

要存储不同的,你可以尝试这样做-每当他执行一个命令与where子句,你做一个select语句与该子句,并将其存储在日志中,并再次重复后,他的命令执行完成,除了delete的情况。