在MySQL中,您可以使用SLEEP
function将结果暂停x秒。
我了解您使用这种方式的时间:
SLEEP
但是最近我看到您可以用这种形式增强查询:
SELECT SLEEP(1000);
它将等待4秒钟,然后才返回与之比较的结果
mysql> select * from docs where rev = 1-sleep(4);
为什么会这样?破折号是连接函数的形式还是类似的形式?我找不到此语法的任何解释。
我使用docker复制了此查询
mysql> select * from docs where rev = 1;
以及下面的代码来创建表(使用docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
docker exec -ti some-mysql mysql -uroot -pmy-secret-pw
中的代码)并验证行为。
sql fiddle
如您所链接的手册中所读,CREATE test;
USE test;
CREATE TABLE IF NOT EXISTS `docs` (
`id` int(6) unsigned NOT NULL,
`rev` int(3) unsigned NOT NULL,
`content` varchar(200) NOT NULL,
PRIMARY KEY (`id`,`rev`)
) DEFAULT CHARSET=utf8;
INSERT INTO `docs` (`id`, `rev`, `content`) VALUES
('1', '1', 'The earth is flat'),
('2', '1', 'One hundred angels can dance on the head of a pin'),
('1', '2', 'The earth is flat and rests on a bull\'s horn'),
('1', '3', 'The earth is like a ball.');
select * from docs where rev = 1;
select * from docs where rev = 1-sleep(4);
返回0。因此,在诸如SLEEP
之类的某种计算中使用它会触发where rev = 1-sleep(4);
的执行(例如:等待四秒钟)。之后,使用SLEEP
恢复查询,使其等于where rev = 1-0