程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 關於MySQL的SLEEP(N)函數

關於MySQL的SLEEP(N)函數

編輯:MySQL綜合教程

關於MySQL的SLEEP(N)函數


都知道通過在MySQL中執行select sleep(N)可以讓此語句運行N秒鐘:
mysql> select sleep(1);
+----------+
| sleep(1) |
+----------+
|        0 |
+----------+
1 row in set (1.00 sec)
返回給客戶端的執行時間顯示出等待了1秒鐘

借助於sleep(N)這個函數我們可以在MySQL Server的PROCESSLIST中捕獲到執行迅速不易被查看到的語句以確定我們的程序是否確實在Server端發起了該語句。比如我們在調試時想確定一下程序是否確確實實向Server發起了執行SQL語句的請求,那麼我們可以通過執行show processlist或者由information_schema.processlist表來查看語句是否出現。但往往語句執行速度可能非常快,這樣的話就很難通過上述辦法確定語句是否真正被執行了。例如下面語句的執行時間為0.00秒,線程信息一閃而過,根本無從察覺。
mysql> select name from animals where name='tiger';
+-------+
| name  |
+-------+
| tiger |
+-------+
1 row in set (0.00 sec)
在這種情況下,可以通過在語句中添加一個sleep(N)函數,強制讓語句停留N秒鐘,來查看後台線程,例如:
mysql> select sleep(1),name from animals where name='tiger';
+----------+-------+
| sleep(1) | name  |
+----------+-------+
|        0 | tiger |
+----------+-------+
1 row in set (1.00 sec)
同樣的條件該語句返回的執行時間為1.0秒。

但是使用這個辦法是有前提條件的,也只指定條件的記錄存在時才會停止指定的秒數,例如查詢條件為name='pig',結果表明記錄不存在,執行時間為0
mysql> select name from animals where name='pig';
Empty set (0.00 sec)
在這樣一種條件下,即使添加了sleep(N)這個函數,語句的執行還是會一閃而過,例如:
mysql> select sleep(1),name from animals where name='pig';
Empty set (0.00 sec)
另外需要注意的是,添加sleep(N)這個函數後,語句的執行具體會停留多長時間取決於滿足條件的記錄數,MySQL會對每條滿足條件的記錄停留N秒鐘。
例如,name like '%ger'的記錄有三條
mysql> select name from animals where name like '%ger';
+-------+
| name  |
+-------+
| ger   |
| iger  |
| tiger |
+-------+
3 rows in set (0.00 sec)
那麼針對該語句添加了sleep(1)這個函數後語句總的執行時間為3.01秒,可得出,MySQL對每條滿足條件的記錄停留了1秒中。
mysql> select sleep(1),name from animals where name like '%ger';
+----------+-------+
| sleep(1) | name  |
+----------+-------+
|        0 | ger   |
|        0 | iger  |
|        0 | tiger |
+----------+-------+
3 rows in set (3.01 sec)


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