提问人:secf00tprint 提问时间:5/30/2020 最后编辑:secf00tprint 更新时间:5/30/2020 访问量:350
带有睡眠函数的 where 子句中的短划线 ( - )
dash ( - ) in where clause with sleep function
问:
在 MySQL 中,您可以使用 SLEEP
函数暂停结果 x 秒。
我明白当你这样使用它时:
SELECT SLEEP(1000);
但是我最近看到,你可以用这种形式来增强查询:
mysql> select * from docs where rev = 1-sleep(4);
它将等待 4 秒钟,然后返回结果,与
mysql> select * from docs where rev = 1;
为什么会这样?破折号是连接函数的一种形式还是类似的东西?我找不到这种语法的任何解释。
我使用 docker 重现了这个查询
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);
答:
4赞
Nico Haase
5/30/2020
#1
正如您在链接的手册中所读到的,返回 0。因此,在某种计算中使用它,例如触发执行(例如:等待四秒)。之后,使用 恢复查询,使其等于SLEEP
where rev = 1-sleep(4);
SLEEP
where rev = 1-0
where rev = 1
评论