【发布时间】:2015-12-28 15:55:12
【问题描述】:
我正在尝试在我的数据库上创建一个小型日志记录表。
用户
+----+------+
| id | name |
+----+------+
| 1 | FOO |
| 2 | BAR |
| 3 | LOS |
+----+------+
Log_Users
+-------------+-------------------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| old_id | int(11) | YES | | NULL | |
| old_name | varchar(100) | YES | | NULL | |
| new_id | int(11) | YES | | NULL | |
| new_name | varchar(100) | YES | | NULL | |
| action_type | enum('C','U','D') | YES | | NULL | |
| time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| doers | int(11) | YES | | NULL | |
+-------------+-------------------+------+-----+-------------------+-----------------------------+
我有一个使用 PHP 创建的小型应用程序,用于将用户 ID 保存到会话中。我如何将此用户的 id 值(在 PHP 的会话上)发送到其中一个表的触发器以记录他们的活动,例如删除其他用户或更新他们?我尝试在日志表上使用触发器来执行所有操作,例如这样。
CREATE TRIGGER userTrigger BEFORE INSERT ON Log_Users FOR EACH ROW
BEGIN
IF(new.action_type = 'C') THEN
INSERT INTO Users(id, name) VALUE(new.new_id, new.new_name);
ELSEIF(new.action_type = 'U') THEN
UPDATE Users SET id = new.new_id, name = new.new_name WHERE id = new.old_id;
ELSEIF(new.action_type = 'D') THEN
SET new.old_name = (SELECT name FROM Users WHERE id = new.old_id);
DELETE FROM Users WHERE id = new.old_id;
END IF;
END~
但是,当用户更新同一列上的多条记录时,我正在努力解决这个问题。最后,什么是以及如何使用 PHP 和 MySQL 进行最佳活动记录以及如何做到这一点?我暂时没有解决这个问题的办法。谢谢。
【问题讨论】:
标签: php mysql logging triggers