-1

stud_first私は 3 つのテーブルを持つデータベースを持っておりstud_secondstud_audit両方ともstud_first同じstud_second列名を持っています。

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

stud_secondt に挿入されたデータを常に取得stud_firsし、同時にコピーされたデータの記録を保持する必要があります。つまり、学生の名前と、学生がt からstud_auditにコピーまたは削除された時刻のログです。の列は次のようになりますstud_firsstud_secondstud_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()

ダッシュとスペースを含む列名の選択は標準的ではありません...許可されていますが、通常はそれを避けると簡単です。

2 つの個別の監査テーブルではなく、実際には 1 つの監査テーブルのみを使用します。これは、「アクション」(変更が INSERT、UPDATE、または DELETE のいずれによるものかを識別する)、「アクター」(アクションを引き起こしたプロセスまたはユーザーを識別する)、および UTC タイムスタンプの追加列を含むテーブルのコピーである可能性があります。

OLD.特別な " " レコードが利用できる場合、UPDATE および DELETE アクションの "監査" トリガーも考慮する必要があります。

繰り返しますが、完全な答えではありませんが、正しい方向に進むにはこれで十分かもしれません。

于 2012-07-30T19:59:04.583 に答える