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

ตั้งค่า Delay สำหรับ MySQL Trigger/Procedure ด้วย SLEEP()

หน่วงเวลาการทำงานด้วย 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 สำหรับงานตามเวลา