หน่วงเวลาการทำงานด้วย SLEEP()
ใช้ฟังก์ชัน SLEEP(seconds) ใน Stored Procedure/Trigger เพื่อ Delay
สร้าง Procedure พร้อม Delay
DELIMITER //
CREATE PROCEDURE delayInMessage()
BEGIN
SELECT SLEEP(20);
SELECT 'AFTER SLEEPING 20 SECONDS, BYE!!!';
END //
DELIMITER ;
เรียกใช้
CALL delayInMessage();
ผลลัพธ์
+-----------+ | SLEEP(20) | +-----------+ | 0 | +-----------+ 1 row in set (20.00 sec) +------------------------------------+ | AFTER SLEEPING 20 SECONDS, BYE!!! | +------------------------------------+ | AFTER SLEEPING 20 SECONDS, BYE!!! | +------------------------------------+ 1 row in set (20.01 sec)
คำอธิบาย
SLEEP(20)- หยุด 20 วินาที คืนค่า 0- ถูก Interrupt (KILL) จะคืน 1
- ใช้ใน Procedure/Trigger/Function ได้
- ไม่แนะนำใน Production - Block Connection/Thread
กรณีใช้งานจริง
- Testing/Simulation Race Condition
- Demo/Teaching
- Retry Logic With Backoff (ใน Application Layer ดีกว่า)
Trigger Example (ไม่แนะนำ)
CREATE TRIGGER delay_trigger BEFORE INSERT ON table
FOR EACH ROW BEGIN
SELECT SLEEP(5); -- Block ทุก Insert 5 วินาที!
END;
ทางเลือกที่ดีกว่า
- Application-level Delay (Thread.sleep, setTimeout, async/await)
- Message Queue + Delayed Delivery (RabbitMQ, Kafka, SQS)
- Event Scheduler สำหรับงานตามเวลา