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

时间:2016-09-21 07:37:39

标签: php sql rdbms

所以这是我的情况: 我有一个管理员用户,可以添加,删除和编辑其他用户。我正在寻找一个如何记录管理员行动的解决方案。我应该比较表,在查询完成之前和之后受影响,以及如何将差异存储在另一个表中?

这是一个受到影响的表:

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)

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

2 个答案:

答案 0 :(得分:1)

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

要存储不同的内容,您可以尝试这样的事情 - 每当他执行带有where子句的命令时,您使用该子句执行select语句并将其存储在日志中并在执行命令后再次重复完成除delete案例外。

答案 1 :(得分:1)

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

硬删除:创建类似于基本用户表的日志表。 删除发生时有一个触发器。将它存储到另一个表中。     

 
    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