sleep(duration)
: 睡眠duration秒,返回0,若没有执行,则返回1
mysql> select * from users where id=1 and sleep(1);
Empty set (1.00 sec)
mysql> select * from users where id=1 or sleep(1);
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | Dumb | Dumb |
+----+----------+----------+
1 row in set (12.00 sec)
观察时间,一个是1,一个是12,为什么呢?
补充一个情况
mysql> select * from users where id=-1 or sleep(1);
Empty set (13.01 sec)
可以看到,当我们查询一个不在表中的id时,时间变成了13
这就是 and
和 or
的短路逻辑
expr1 and expr2
: 如果expr1真,则继续执行expr2,若expr1假,则不执行expr2(样例如下)
select * from users where id=-1 and sleep(1);
Empty set (0.00 sec)
expr1 or expr2
: 如果expr1真,则不执行expr2,若expr1,则执行expr2
select * from users where id=1 and sleep(1);
中
id=1为真时,执行一次sleep(1),但是返回为0,所以where后为0,结果为Empty set
id不为1时,不执行sleep。
select * from users where id=1 or sleep(1);
中
id=1为真时,不执行sleep,其他12条id不为1的数据全部执行sleep(1),但此时where后为0,不出数据