SLEEP,CAST,REGEXP QUERY EXPLANATION

时间:2013-01-28 18:20:24

标签: mysql

我有一个问题:

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秒

所以,现在最后一个问题是:

  • 如果tb只有一个名称为'bob'的记录,那么数据库会暂停15秒吗?

1 个答案:

答案 0 :(得分:2)

  

如果tb只有一个名为'bob'的记录,那么数据库会暂停15秒吗?

不,通过查询,数据库永远不会暂停,因为CAST((SELECT 'a' REGEXP '^[n-z]') AS signed) * 15始终返回0,完全独立于您的记录:它不使用表中的任何列,'a'是一个字符串文字。

但除此之外,你分析它是正确的。您显示的查询没有任何意义。