2012-03-25 8 views
3

私は非常に大きなデータベース〜600万レコードを扱っています。私は〜30,000の悪い記録を今日追加しました。 MySQLで今日作成されたすべてのレコードを削除するにはどうすればよいですか?今日作成されたすべてのレコードを削除するには?

+0

作成タイムスタンプはありますか? – icktoofay

+0

はいcreated_at: "2012-03-25 21:52:21"しかし、それぞれは非常に具体的です –

+1

あなたのテーブルにデータの作成時間を保存しないように教えてください。 –

答えて

8

created_atはdatetimeと思われます。試してみてください。もちろん

delete from table 
where date(created_at) = curdate() 

、実行select *このクエリを実行し、削除しようとしているデータは、あなたが本当に削除したいものであることを確認する前に。

+2

これは本当に遅くなります。 –

0

表 ( (DAY(CallDate)= DAY(GETDATE()) AND (MONTH(CallDate)= MONTH(GETDATE()) AND (YEAR(CallDate)= FROM をDELETE YEAR(GETDATE()) )

0

は、以下試してみてください。

delete from table 
where left(created_at,10) =curdate() 
0

を条件

WHERE created_at >= '2012-03-25' 
    AND created_at < '2012-03-26' 

を使用して行を識別できます(インデックスがcreated_atの場合は非常に効率的です)。

削除する前に、テーブルをバックアップしてください(またはデータベース全体をバックアップすることをお勧めします)。さらに、テーブルからテーブルを削除する前に、いくつかのテーブル(tempまたはpermament)を使用して行を保存することができます。問題のデータを消去したことが確かな場合は、この一時表を削除してください。

CREATE TABLE wrong_data AS 
    SELECT * 
    FROM tableX 
    WHERE created_at >= '2012-03-25' 
    AND created_at < '2012-03-26' ; 

DELETE t 
FROM tableX AS t 
    JOIN wrong_data AS w 
    ON w.PK = t.PK ; 
関連する問題