Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ลบข้อมูลที่เก่ากว่า 5 นาทีจาก Timestamp ใน MySQL

การเตรียมข้อมูล

mysql> CREATE TABLE DemoTable1851 (DueDate DATETIME);

mysql> INSERT INTO DemoTable1851 VALUES('2019-12-03 21:30:35');
mysql> INSERT INTO DemoTable1851 VALUES('2019-12-03 21:45:00');
mysql> INSERT INTO DemoTable1851 VALUES('2019-12-03 21:34:00');

เวลาปัจจุบัน

mysql> SELECT NOW();
+---------------------+
| now()               |
+---------------------+
| 2019-12-03 21:38:46 |
+---------------------+

ลบข้อมูลเก่ากว่า 5 นาที

mysql> DELETE FROM DemoTable1851
    WHERE DueDate < (NOW() - INTERVAL 5 MINUTE);
Query OK, 2 rows affected

ผลลัพธ์ (เหลือแค่ 21:45 ที่ยังไม่เก่า 5 นาที)

mysql> SELECT * FROM DemoTable1851;
+---------------------+
| DueDate             |
+---------------------+
| 2019-12-03 21:45:00 |
+---------------------+

การคำนวณเวลา

DueDateDiff จาก NOWเก่า > 5 นาที?
21:30:358 นาที 11 วินาทีใช่ → ลบ
21:34:004 นาที 46 วินาทีไม่ → คงไว้
21:45:00-6 นาที (อนาคต)ไม่ → คงไว้

รูปแบบอื่นของ INTERVAL

-- 1 ชั่วโมง
WHERE DueDate < NOW() - INTERVAL 1 HOUR

-- 1 วัน
WHERE DueDate < NOW() - INTERVAL 1 DAY

-- 30 วัน
WHERE DueDate < NOW() - INTERVAL 30 DAY

-- รวมได้
WHERE DueDate < NOW() - INTERVAL 1 DAY 5 HOUR

ประสิทธิภาพ: ใช้ Index ได้

รูปแบบ DueDate < NOW() - INTERVAL ... เป็น SARGable สามารถใช้ Index บน DueDate ได้