程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql定時執行及延時執行,實現類似sql server waitfor功能,mysqlwaitfor

mysql定時執行及延時執行,實現類似sql server waitfor功能,mysqlwaitfor

編輯:MySQL綜合教程

mysql定時執行及延時執行,實現類似sql server waitfor功能,mysqlwaitfor


熟悉SQL Server的人都知道,它有一個很有用的功能,waitfor time和waitfor delay,前者表示在某個時間執行,後者表示等待多長時間執行。在我們測試功能和定時執行的時候特別有用,那麼我們在mysql中如何實現呢?

mysql只有一個定時函數,select(),我們只能通過這個函數來想辦法了。

sleep()說明:

mysql> select id from c;
+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)

mysql> select sleep(1),id from c;
+----------+------+
| sleep(1) | id |
+----------+------+
| 0 | 1 |
| 0 | 2 |
+----------+------+
2 rows in set (2.00 sec)

sleep(duration),表示等待的時間,參數以秒為單位。可以看出此時的sleep(),代表每次執行則等待1秒,有多少行數便等待多長時間。

延時執行:

有了等待這個概念,要延時就簡單了,我們稍微變通下,先執行sleep(1),再執行語句。

mysql> delimiter //
mysql> select sleep(1);
-> select id from c;
-> //
+----------+
| sleep(1) |
+----------+
| 0 |
+----------+
1 row in set (1.00 sec)

+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (1.01 sec)

此時可以看到已經實現了等待1秒的效果。

定時執行:

其實,定時執行的話完全可以通過event來實現,但是,追求精簡便捷的我們完全不能忍受這麼繁瑣的步驟,必須在一個界面來實現。

既然有了延時,而我們又知道執行的時間,那我們只需要知道現在距離執行時間有多少秒就能實現了,於是,我們只缺一個計算時間差函數TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)。

此函數類似sql server中的datediff()函數,用法都是一樣的。

mysql> set @datestop = '2015-08-21 15:50';
-> set @i = timestampdiff(second,now(),@datestop);
-> select sleep(@i);
-> select now();
-> select id from c;
-> //
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

+-----------+
| sleep(@i) |
+-----------+
| 0 |
+-----------+
1 row in set (1 min 51.00 sec)

+---------------------+
| now() |
+---------------------+
| 2015-08-21 15:50:00 |
+---------------------+
1 row in set (1 min 51.01 sec)

+------+
| id |
+------+
| 1 |
| 2 |
+------+
2 rows in set (1 min 51.03 sec)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved