-1

我有一个包含三个表的数据库stud_firststud_second并且stud_audit两者都stud_first具有stud_second相同的列名,即

name,
stud-id,
age,
class
number_of-course_taken

我想stud_second始终获取插入stud_first 的任何数据,同时stud_audit应该记录复制的数据,即学生姓名的日志以及他们从 t 复制或删除到stud_first的时间stud_second。中的列stud_audit应如下所示

name,
time copied 

我想mysql单独做或结合java

4

1 回答 1

0

不是一个完整的答案,但这可能足以让您朝着正确的方向开始......

DELIMTER $$
CREATE TRIGGER stud_first_ar 
AFTER INSERT ON stud_first
FOR EACH ROW
BEGIN
  INSERT INTO stud_second
  (`name`, `stud-id`, `age`,`class`,`number_of-course_taken`) 
  VALUES
  (NEW.`name`,NEW.`stud-id`,NEW.`age`,NEW.`class`,NEW.`number_of-course_taken`);

  INSERT INTO stud_audit (`name`, `time copied`) 
  VALUES (NEW.`name`,UTC_TIMESTAMP());

END$$

如果您不关心时区问题,您可以使用NOW()代替。UTC_TIMESTAMP()

包含破折号和空格的列名的选择是非标准的......这是允许的,但是当您避免这样做时通常会更容易。

我实际上只有一个审计表,而不是两个单独的审计表。它可以是带有附加列的表的副本,用于“操作”(识别更改是由于插入、更新还是删除)、“参与者”(识别导致操作的进程或用户,以及 UTC 时间戳。

您可能还需要考虑 UPDATE 和 DELETE 操作的“审核”触发器,其中您有OLD.可用的特殊“”记录。

同样,这不是一个完整的答案,但这可能足以让您朝着正确的方向开始。

于 2012-07-30T19:59:04.583 回答