如果第一个resutl为false,mysql sleep将无法工作

时间:2016-05-07 14:36:36

标签: mysql sql

mysql> select * from users where id=0;
Empty set (0.00 sec)

mysql> select * from users where id=0 and sleep(5);
Empty set (0.00 sec)

mysql> select * from users where id=0 and benchmark(1000000,sha1(1));
Empty set (0.39 sec)

mysql> select * from users where id=0 xor sleep(5);
Empty set (1 min 5.02 sec)

当id = 0时,用户不存在。为什么第二个查询不睡5s?当我使用benchmark(1000000,sha1(1))xor sleep(5)时,为什么会睡觉?

感谢。

1 个答案:

答案 0 :(得分:0)

这被称为“短路”,它被认为是几乎所有数据库的功能 - 几乎所有编程语言。

不执行不需要执行的逻辑。它与sleep()无关。当引擎已经知道答案时,只需要停止执行代码。

我不认为在单个查询中强制sleep()是一个好主意。 SQL查询旨在是程序性的。它们描述结果集,查询引擎生成适当的代码。 sleep()不在SQL结果集的范围内。

我建议 - 如果真的需要x + z = 5 - 你可以在脚本中单独执行一步。