2009-12-17 35 views
0

我有一个数据库可以被多个用户访问。是否有任何方法可以设置表格,以便每当有人输入新记录或修改记录时,他/她的用户名和输入的日期都会存储在与记录本身相同的表中的2列中。该表如下所示:自动添加用户和日期到记录

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

我使用的是phpMyAdmin的GUI。

谢谢!

回答

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 
+0

是否可以这样做,以便用户可以更新和添加记录? – Tim 2009-12-17 05:58:23

+0

@Tim:是的,用户可以添加和更新记录。如果未提供值/空值,则DEFAULT约束将应用该值。有关默认时间戳约束的更多信息:http://dev.mysql.com/doc/refman/5.0/en/timestamp.html – 2009-12-17 06:09:03

0

首先,你可能要花费一些时间来考虑设计一个审核机制的最佳方式,因为添加两列到你的数据库的每个表可能不是最优的。

话虽如此,你所要找的做你所描述的是一个触发器。这是每次调用指定操作时都会执行的一段SQL。对于你的情况粗略的例子:

插入的“表格名” 插入(用户,时间)到“表格名”

后创建触发器的审计 我不记得确切的MySQL语法,但是这是一个粗略的你需要的例子。如果不清楚,请询问后续问题。