私は、MySQLデータベースに格納されているリソースの束を持っています。特定のフィールドのみのmySQL `date_updated`カラム:SELECTとINSERTの対TRIGGER?
それぞれはdate_modified
フィールドがあり、ON UPDATE CURRENT_TIMESTAMP
に設定されています。
ただし、これらのテーブルには、date_modified
をトリガーしたくない列があります。
私には2つのオプションがあります。 (テーブルのリファクタリングを除く)
1)更新前に、現在のエンティティをDBからロードし、フィールドが変更されているかどうかを確認し、それに基づいてdate_modified
を設定します。
2)OLD
フィールドに対してNEW
フィールドをチェックし、タイムスタンプを設定する各テーブルに対してTRIGGER
を作成します。
私は2つのアプローチの間で引き裂かれています。
1は、2つのクエリを実行する必要があるため、オーバーヘッドが大きくなります。
2は、データの完全性を維持するのに役立ちますが、アプリケーションロジックの一部を隠してしまうため、後で問題を引き起こす可能性があります。新しいフィールドが後で追加された場合、開発者はトリガーを更新して、変更された列を確実に更新するよう覚えておく必要があります。
3つ目のアプローチはありますか?どういうわけか、値が変更されたかどうかを確認してから、date_modifiedを更新しますか?
またはこれに対処する他の方法はありますか?
ええ、それは私がちょうど遊んでいたものです。私は実際に他の方向からそれに近づいていました - 自動タイムスタンプを削除して、SET文でフィールドが変更されているかどうかを確認してください.... 'SET date_modified = CASE \t WHEN(a!今度は \t ELSE date_modified END' –
しかし、それはもっと複雑さを増やしますが、Idはむしろそれを簡単に保ちます! –