MySQLも5.xからトリガーが使えるようになりました。SQL SERVERやPostgreSQLでストアド、トリガーを多用していたハセテツとしては大変ありがたいわけです。
delimiter //
これで書き始めます。デリミタは「;」ですが、トリガーの記述の中でもセミコロンを使うために一時的に「デリミタはスラスラだよ」と宣言しておきます。べつにスラスラじゃなくてもOKでしょう。
create trigger トリガー名称
before insert on 対象テーブル for each row begin
declare target_id tinyint;
select hoge_id into target_id from マスタデータテーブル where hoge_code = new.hoge_code;
set new.log_hoge_id = target_id;
end; //
まぁなんのこっちゃわからんサンプルですが、declareで変数宣言、select intoで変数へ代入、setで値を設定しています。この例は「ログデータテーブルに値を突っ込む前にマスタテーブルから値を引っ張ってきておいて、それをinsertします」っていう感じです。
終わったら
delimiter ;
でデリミタを元に戻すのをお忘れなく。
テーブル例も書いたほうがいいんだろうけど、申し訳ないけど割愛。特定テーブルの値が更新されたら更新ログを残す、なんてことも「after update」でできるので、フロントエンド側のコードをごちゃごちゃさせずに複雑な処理がさせられると思います。