2016-10-16 20 views
1

行を削除して削除された行の値を返すことは可能ですか?行を削除し、削除された行のIDを返す

DELETE FROM table where time <= -1 week SELECT all id that were deleted

+0

http://stackoverflow.com/a/8602422/2908724 – bishop

+0

@ bishopありがとうございましたが、最後に削除された行だけが動作するようです。 –

答えて

2

したい場合データベース内の操作を制御するには、JOURNALテーブルを使用することを検討することができます。これについてはhereの質問があります。

これらはミラーリングされたテーブルで、通常は実行された操作(更新、削除)を伴うトリガーによって作成されます。 "古い値"(現在の値は常にメインテーブルから取得できます)を保存します。

このように実装されている場合、ジャーナルテーブルからSELECTを選択して、必要なものを正確に取得できます。

あなたの例を与えるためにしよう:

表のUSER

CREATE TABLE USER (
    INT id, 
    VARCHAR name 
) 

表USER_JN

CREATE TABLE USER_JN (
    INT id, 
    VARCHAR name, 
    VARCHAR operation 
) 

その後、すべての操作のためにあなたがUSER_JNを移入し、すべての変更履歴を持つことができます(あなたはそれに制約を持つべきではありません)。

削除すると、operation列の値はdeleteになります。これをチェックするにはselectを使用します。

「削除された行を選択する」というのは正確ではありませんが、それを可能にする方法です。

どういうわけか便利ですね。

+0

Tomさん、ありがとう、私はこのルートに行くと思います。 –

+1

ニース。このアプローチは、システムの監査にも適しています。乾杯。 – Tom

1
時間< = -1週間後、

とは、単に

テーブルWHERE時間<。DELETE FROMテーブルFROM

SELECT ID = -1週間

+0

情報のおかげでありがとうございました。 1つの行でそれを行う方法? –

+0

もちろん、ストアドプロシージャを呼び出してください。 1行 – Drew

+0

私はそれらの専門家ではありませんが、私が考えることができるのは、["trigger"](http://dev.mysql.com/doc/refman/5.7/en/triggers.html)を使用して、インフォメーション – Makaronodentro

関連する問題