mysql定时执行及延时执行,实现类似sql server waitfor功能
熟悉SQL Server的人都知道,它有一个很有用的功能,waitfor time和waitfor delay,前者表示在某个时间执行,后者表示等待多长时间执行。在我们测试功能和定时执行的时候特别有用,那么我们在mysql中如何实现呢?
mysql只有一个定时函数,sleep(),我们只能通过这个函数来想办法了。
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)
mysql定时执行及延时执行,实现类似sql server waitfor功能的更多相关文章
- mysql定时脚本(event),类似oracle的job
mysql定时脚本(event),类似oracle的job 我有2张表:tb_push_data 和 tb_push_data_log 现在需要每隔一段时间将tb_push_data 符合条件的 ...
- 如何將 MySQL 資料庫轉移到 Microsoft SQL Server 與 Azure SQL Database
MySQL 是相當常用之資料庫伺服器,而微軟雲端服務 Microsoft Azure 上 Azure SQL Database 是一個功能強大且經濟實惠的選擇,透過本篇文章,使用 SQL Server ...
- hibernate mysql 分页时报错 显示的代码和sql server 类似 select top 1……
[ERROR][com.alibaba.druid.filter.stat.StatFilter]merge sql error, dbType mysql, sql : select top 1 d ...
- 说说我对SQL语句执行顺序的理解,以SQL Server为例
有人说SQL语句难学,其实并不难!只要掌握了基本的语句执行顺序,用程序化的思维分析结构,再难的问题也会迎刃而解! 假设有如下表emp 现在要求 列出员工姓名(ename)中不含A的所有人按照部门编号( ...
- SQL Server 执行计划缓存
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/内存池/缓冲区 概述 了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储,这也是写这篇文章的目的,在了解执行计划之 ...
- 第1/24周 SQL Server 如何执行一个查询
大家好,欢迎来到第1周的SQL Server性能调优培训.在我们进入SQL Server性能调优里枯燥难懂的细节内容之前,我想通过讲解SQL Server如何执行一个查询来建立基础.这个部分非常重要, ...
- SQL Server安全(6/11):执行上下文与代码签名(Execution Context and Code Signing)
在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...
- 了解Sql Server的执行计划
前一篇总结了Sql Server Profiler,它主要用来监控数据库,并跟踪生成的sql语句.但是只拿到生成的sql语句没有什么用,我们可以利用这些sql语句,然后结合执行计划来分析sql语句的性 ...
- 第六篇 SQL Server安全执行上下文和代码签名
本篇文章是SQL Server安全系列的第六篇,详细内容请参考原文. SQL Server决定主体是否有必要的执行代码权限的根本途径是其执行上下文规则.这一切都可能复杂一个主体有执行代码的权限,但是却 ...
随机推荐
- 转载自php100中文网 centos下lamp 环境搭建
学习PHP脚本编程语言之前,必须先搭建并熟悉开发环境,开发环境有很多种,例如LAMP.WAMP.MAMP等.这里我介绍一下LAMP环境的搭建,即Linux.Apache.MySQL.PHP环境. 一. ...
- Java was started but returned exit code=13
安装Eclipse(32位)后打开报错:Java was started but returned exit code=13 解决方法: 1,首先我查看了我当前安装的JDK版本,发现是64位的: 2, ...
- The given object has a null identifier解决之法
<input type="hidden" name="memberPermission.id" value="${memb ...
- android使用apktool反编译出现Input file (d:\t) was not found or was not readable
Input file (d:\t) was not found or was not readable 出现这个错误是因为apktool压缩包下载错误,我是下成首页的那个压缩包了 正确下载地址:htt ...
- SQL 从100万条记录中的到 成绩最高的记录
从100万条记录中的到 成绩最高的记录 问题分析:要从一张表中找到成绩最高的记录并不难,有很多种办法,最简单的就是利用TOP 1 select top 1 * from student order b ...
- js中()()问题
var aa=function(){}(); var bb=(function(){})(); 今天被问到这个问题,这段js有撒区别. 总结一下,两个函数都是立即执行的意思.但是不同之处是执行的顺序, ...
- 如何在Windows下使用matplotlib
在开始之前,向matplotlib的创造者,John D. Hunter表示崇高的敬意,和无尽的怀念. (John D. Hunter 1968-2012) matplotlib是一个给予Python ...
- Android调用第三方应用
Intent intent=new Intent(); //包名 包名+类名(全路径) intent.setClassName("com.qn.app.store", " ...
- java,大数据批量插入、更新
public void exec(Connection conn){ try { conn.setAutoCommit(false); Long beginTime = System.currentT ...
- 最牛逼的的shell命令
参考 远程diff [root@jiangyi01.sqa.zmf /home/ahao.mah/ALIOS_QA/tools/iperf] #ssh ahao.mah@dnstest02.tbc c ...