酒馆师傅人真的好 先撸一波管 学习学习
这里要先说明一个问题:sleep(5)<=>false 呜呜 不要问我为什么 弟弟也是网上看的
查询语句:
select user,password from user where user='root' and sleep(5);
结果:
发现持续了15s
以上语句执行时间为什么是15秒?
原因:
这个问题涉及到了MySQL中and的工作机制,比如where A and B。MySQL会先进行查询满足条件A的结果集:
select * from user where user = 'A'; -- 假设返回结果集1
然后从结果集1中查询满足条件B的:
select * from 结果集1 where user='B';
由于满足user=’root’的结果集中包含3个数据,所以sleep(5)被执行了3次,因此延时15秒。
查询语句:
select user,password from user where user='aaa' or sleep(5);
结果:
这个问题涉及到了MySQL or的工作机制,比如where A or B,MySQL会先查询出非A的结果集1:
select * from user where user != 'A';
然后在结果集1中查询出非B的结果集2:
select * from 结果集1 where user != 'B';
第三步是从user表中查询非结果集2的结果,也就是最终结果:
select * from user where user!= 结果集1;