2011-10-24 11 views
0

この問題に関するご意見をお聞きしたいと思います。削除時のMySQLステータスアップデートトリガー

私は自分のプロジェクトにMySQLデータベースを使用しています。ほぼすべてのテーブルで、ステータス(ENUM( 'active'、 'inactive'、 'deleted'))という列があります。

これはパフォーマンス上の理由から行うため、行が必要なくなる(削除される)たびに、実際にDBから削除するのではなく、削除済みに設定します。これはかなり良いことが証明されています。

しかし、私はいつもアクティブから削除された行を更新するために私のプロジェクトにPHP関数を書く必要があります。

あなたはどう思いますか、MySQLのトリガやその他の手法を使用してこれをどのように解決できますか?

ありがとうございました

答えて

1

削除するように行を更新すると何が問題になりますか?結局のところ

DELETE FROM projects WHERE id = :id; 

UPDATE projects SET status = 'deleted' WHERE id = :id; 

は大きな違いを作るか、それをしないのですか?

1

私は書き込みに大きな違いはないと信じています。

DELETE FROM table WHERE id = 1 

または

UPDATE table SET status = 'deleted' WHERE id = 1 

とすぐに、あなたのすべてのテーブルに同じ名前で同じフィールドを作成すると、トリガ機能は私にその、不可欠なのは思えません。

+0

..レコードを削除する、または削除にステータスを更新するか、データベースの呼び出しを行う必要があります私はあなたの答えを誤って私の代わりに編集しました。ちょうどそれを転がした。私たちの答えはほぼ同じです。したがって、私は気づかなかった:)。 – middus

+0

@middus:問題ありません:) –

0

アプリケーションのユースケースを実装するには、常にアプリケーションコードからデータベースに要求する必要があります。これが行の実際のDELETEステートメントであるか、ステータスを 'deleted'に設定するUPDATEステートメントであっても、それは重要ではありません。あなたは何らかのトリガーでこれを回避することはできません。

0

それはあなたが達成しようとしているものによって異なり..

そのが削除されたら、あなたは二度と行を必要としない場合、あなたはそれを削除する必要があります - ステータス列を更新することは本当にありませんあなたのために大いに。パフォーマンス面では、実際に行を物理的に削除すると(データベースの実際の構造にもよりますが)、おそらくもっとうまくいくでしょう。

削除後にレコードを保持する必要がある場合主テーブルからレコードを削除するときにレコードのコピーを書き込むアーカイブテーブルを作成することができます。コピーは、いずれかの方法..オン削除トリガーによって

を書かされるだろう、あなたはいつも申し訳

関連する問題