【问题标题】:Automatically add user and date to records自动将用户和日期添加到记录
【发布时间】:2010-12-27 12:46:30
【问题描述】:

我有一个可供多个用户访问的数据库。有什么方法可以设置表格,以便每当有人输入新记录或修改记录时,他/她的用户名和输入的日期将存储在与记录本身相同的表中的 2 列中。表格如下所示:

Id  |  Name  | Username | Date Entered | Date Modified
 1  |  Cat   |    john  |  1999-05-05  | 1996-06-06  

我使用的是 phpMyAdmin 的 GUI。

谢谢!

【问题讨论】:

    标签: mysql phpmyadmin


    【解决方案1】:

    您可以在数据类型声明后使用NOT NULL 创建表时将列设置为不允许空值。否则,如果列已存在,则使用 ALTER TABLE 语句更改列,或者将列添加到现有表中。

    这将阻止某人添加记录,但不会更新。如果您有一个单独的用户表要引用,您将使用外键关系来确保如果用户列被填充,它将由一个有效的用户完成。

    如果未提供值,则可以使用 DEFAULT 约束来设置日期字段的值。

    ALTER TABLE x
      ADD USER VARCHAR(45) NOT NULL
    
    ALTER TABLE x
      ADD DATE_ENTERED DATE NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    
    ALTER TABLE x
      ADD DATE_ENTERED DATE NOT NULL DEFAULT ON UPDATE CURRENT_TIMESTAMP
    

    【讨论】:

    • 是否可以让用户更新和添加记录?
    • @Tim:是的,用户可以添加和更新记录。如果未提供 value/null,则 DEFAULT 约束将应用该值。有关默认时间戳约束的更多信息:dev.mysql.com/doc/refman/5.0/en/timestamp.html
    【解决方案2】:

    首先,您可能需要花一些时间考虑设计审计机制的最佳方式,因为向数据库中的每个表添加两列可能不是最佳的。

    话虽如此,您正在寻找执行您所描述的操作的是触发器。这是每次调用指定操作时都会执行的一段 SQL。您的案例的粗略示例:

    创建触发器审核 在“table_name”上插入后 将(用户,时间)插入“table_name”

    我不记得确切的 mysql 语法,但这是您需要的粗略示例。如果不清楚,请提出后续问题。

    【讨论】:

      猜你喜欢
      • 2010-12-14
      • 2015-08-21
      • 2021-08-20
      • 2015-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-22
      • 1970-01-01
      相关资源
      最近更新 更多