В MySQL вы можете приостановить результат на x секунд с помощью SLEEP
функции .
Я понимаю, когда вы используете это так:
SELECT SLEEP(1000);
Но недавно я увидел, что вы можете улучшить запрос в такой форме:
mysql> select * from docs where rev = 1-sleep(4);
, и он будет ждать 4 секунды, прежде чем вернет результаты по сравнению с
mysql> select * from docs where rev = 1;
Почему это так? Является ли da sh формой конкатенации функций или чем-то подобным? Я не смог найти объяснения этому синтаксису.
Я воспроизвел этот запрос, используя 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);