【问题标题】:User ID insert in SQL trigger在 SQL 触发器中插入用户 ID
【发布时间】:2012-05-09 07:58:26
【问题描述】:

我一直在网上寻找答案,但大多数人都使用编程语言来回答。我目前正在运行 MySQL 服务器并希望跟踪 staff 表,当员工职位更新时,触发器应将值插入到 staff_audit 表中。现在最大的问题是如何访问用户 ID?

到目前为止的代码:

CREATE TRIGGER staff_aft_update 
  AFTER UPDATE ON staff 
  FOR EACH ROW 
    INSERT INTO staff_audit 
      ( sau_st_staffno, sau_st_position_before, 
        sau_st_position_after, sau_user_id, ts) 
    VALUES 
      ( old.st_staffno, old.st_position, 
        new.st_position, userid);

userid 是我想要插入 ID 的位置。提前致谢。

【问题讨论】:

  • 对不起,进入 'staff_aft_update' 表。
  • mysql,但我也可以访问 sql server。

标签: mysql sql triggers


【解决方案1】:

如果我理解正确,您想要执行UPDATE 的人的userid?如果 userid 是 MySQL 用户名,则使用 SUBSTRING_INDEX(USER(),'@',1);否则,您将需要从您的应用程序代码中提供userid

【讨论】:

    【解决方案2】:

    以下链接应该可以帮助您找到答案。这给出了 MySQL 中的信息函数列表..

    http://dev.mysql.com/doc/refman/5.0/en/information-functions.html

    确实,您需要使用信息函数 USER() 需要根据您需要实现的逻辑从应用程序代码中传递用户 ID。

    对于您的要求,您确实需要截断从“@”符号开始的所有内容,因为如果您使用的是信息功能,则功能用户的格式是 user@localhost ...。 希望这会有所帮助

    【讨论】:

    • 您不能为此目的使用CURRENT_USER(),因为触发器将在其定义者的帐户下运行。仅供参考,我的回答使用SUBSTRING_INDEX 执行您提到的截断。
    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多