我有一个包含三个表stud_first
,stud_second
和stud_audit
的数据库stud_first
和stud_second
具有相同的列名
name,
stud-id,
age,
class
number_of-course_taken
我希望stud_second
始终在stud_firs
t中插入任何数据,同时stud_audit
应保留所复制数据的记录,即学生姓名和日志他们被复制或删除stud_firs
到stud_second
的时间。 stud_audit
中的列应该如下所示
name,
time copied
我想单独使用mysql
或将其与java
答案 0 :(得分: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()
。
包含破折号和空格的列名的选择是非标准的...它是允许的,但是当你避免这样做时通常会更容易。
我实际上只有一个审计表,而不是两个独立的审计表。它可以是表的副本,其中包含“action”的附加列(标识更改是由INSERT,UPDATE还是DELETE引起),“actor”(标识导致操作的进程或用户以及UTC时间戳。) / p>
您可能还需要考虑UPDATE和DELETE操作的“审核”触发器,其中您可以获得特殊的“OLD.
”记录。
同样,不是一个完整的答案,但这可能足以让你开始朝着正确的方向前进。