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)
时,为什么会睡觉?
感谢。
答案 0 :(得分:0)
这被称为“短路”,它被认为是几乎所有数据库的功能 - 几乎所有编程语言。
不执行不需要执行的逻辑。它与sleep()
无关。当引擎已经知道答案时,只需要停止执行代码。
我不认为在单个查询中强制sleep()
是一个好主意。 SQL查询不旨在是程序性的。它们描述结果集,查询引擎生成适当的代码。 sleep()
不在SQL结果集的范围内。
我建议 - 如果真的需要x + z = 5
- 你可以在脚本中单独执行一步。