mysql触发器,用于记录何时以及从特殊访问表中的表中访问什么数据

xzv2uavs  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(322)

我的mysql数据库中有两个表 access & user . 我想创建一个触发器,它在每次访问用户表时都会激活,并记录一个时间戳和所有被请求的列。
例如,如果有人要求 nameuser 哪里 ID=20 然后触发器将在可访问表中创建一个新行,记录 userID, timestamp in unix format, rows column 所以呢 userID=20, timestamp=1515147950, rowAccessed=name .
这样的扳机看起来怎么样?
编辑:
用户表(innodb):

| ID |  name  |    email    | age |
+----+--------+-------------+-----+
| 1  | Alice  | alice@a.com | 20  |
| 2  | Bo b   | bob@b.com   | 12  |
| 3  | Carl   | carl@c.com  | 32  |

访问表(innodb):

| ID | userID |  timeStamp  | column |
+----+--------+-------------+--------+
| 1  |   2    | 1515149281  | name   |
| 2  |   1    | 1515148251  | email  |

access表中的数据是我希望触发器填充的。
access表中的userid列通过innodb关系链接到user表的id

7eumitmz

7eumitmz1#

不必说,对你的问题最好的选择是从代码处理它。但是如果有必要从mysql上做的话。。。这是一种方法,可能行不通,我无法访问mysql来测试它,但我将从这里开始:

create table user (
  ID int primary key,
  name text,
  email text,
  age int
)

create table access (
  ID int primary key auto_increment,
  userID int,
  time timestamp,
  columnName text
)

insert into user values (1, 'Alice', 'alice@alice.com', 20), (2, 'Bob', 'bob@bob.com', 25)

create procedure selectUser(colName Boolean, colEmail Boolean, colAge Boolean, id INTEGER)
BEGIN
  DECLARE justNow timestamp;
  select now() into justNow;
  IF colName THEN
    insert into access(userID, time, columnName) values (id, justNow, 'name');
  END IF;
  IF colEmail THEN
    insert into access(userID, time, columnName) values (id, justNow, 'email');
  END IF;
  IF colAge THEN
    insert into access(userID, time, columnName) values (id, justNow, 'age');
  END IF;

  SET @s = CONCAT('SELECT name FROM user');
  PREPARE stmt FROM @s;
  EXECUTE stmt;
  DEALLOCATE PREPARE stmt;

END

call selectUser(true, true, true, 1)

我还没有完成列查询的部分,但这很简单。让我们知道这种方法是否适合您。

相关问题