我有一个问题:
SELECT * FROM tb WHERE id=1
AND
sleep(CAST((SELECT 'a' REGEXP '^[n-z]') AS signed) * 15);
我正在努力了解它是如何运作的。
1)SELECT * FROM tb WHERE id = 1#这很简单,无需解释
2)sleep(CAST((SELECT 'a' REGEXP '^[n-z]') AS signed) * 15);
#这是一个棘手的问题
对我来说。
我相信事情是:睡觉(结果 - > CAST((SELECT'a'REGEXP'^ [n-z]')AS签名)乘以15。
我担心的是:
CAST是一个转换函数(例如从字符串到日期),但在这里它用于转换带符号数字的字符串..是正确的吗?
REGEXP,我相信是这样使用的:(SELECT 'a' REGEXP '^[n-z]')
返回0(零)所以乘以15总是0.但是(SELECT 'p' REGEXP '^[n-z]')
返回1所以在这种情况下DBMS睡眠15秒
所以,现在最后一个问题是:
答案 0 :(得分:2)
如果tb只有一个名为'bob'的记录,那么数据库会暂停15秒吗?
不,通过此查询,数据库永远不会暂停,因为CAST((SELECT 'a' REGEXP '^[n-z]') AS signed) * 15
始终返回0,完全独立于您的记录:它不使用表中的任何列,'a'是一个字符串文字。
但除此之外,你分析它是正确的。您显示的查询没有任何意义。