2016-08-12 8 views
0

私は、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を更新しますか?

またはこれに対処する他の方法はありますか?

答えて

1

3つ目の選択肢があります。 UPDATEクエリのdate_modified列を参照してください。例えば

DATE_MODIFIED値を維持しながら、

UPDATE some_table 
    SET some_column = 'new value', 
     date_modified = date_modified 
    WHERE id = some_id_value 

これは、テーブル内の行を変更します。

+0

ええ、それは私がちょうど遊んでいたものです。私は実際に他の方向からそれに近づいていました - 自動タイムスタンプを削除して、SET文でフィールドが変更されているかどうかを確認してください.... 'SET date_modified = CASE \t WHEN(a!今度は \t ELSE date_modified END' –

+0

しかし、それはもっと複雑さを増やしますが、Idはむしろそれを簡単に保ちます! –

関連する問題