我需要创建 MySQL 触发器,该触发器将在删除表行语句上记录用户 ID,该语句必须适合一个查询,因为我使用的是 PHP PDO。这是我到目前为止提出的:
我需要在删除查询中传递用户 ID 的方法,即使它与要执行的删除操作无关:
通常,查询将如下所示:
DELETE FROM mytable WHERE mytable.RowID = :rowID
如果我可以在我的语句中使用多个查询,我会这样做:
SET @userID := :userID;
DELETE FROM mytable WHERE mytable.RowID = :rowID;
这样,变量@userID 将在触发事件触发之前设置并且它可以使用它。但是,由于我需要在一个查询中压缩我的删除语句,所以我想出了这个:
DELETE FROM mytable
WHERE CASE
WHEN @userID := :userID
THEN mytable.RowID = :rowID
ELSE mytable.RowID IS NULL
END
请注意:RowID 永远不会为空,因为它是主键。现在我必须创建一个删除触发器来将用户 ID 记录到审计表中,但是我想在这种情况下触发器将在删除查询本身之前触发,这意味着不会创建 @userID 变量?这是我将其作为值传递给触发器的想法。
我觉得我已经接近解决方案了,但这个问题是一个障碍。如何在语句中没有多个查询的情况下将用户 ID 值传递给触发器?有什么想法、建议吗?