熟悉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)