我有一个问题:
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);
# 这是一个棘手的问题
对我来说。
我相信事情是:sleep for (--> CAST((SELECT 'a' REGEXP '^[n-z]') AS signed) 的结果乘以 15。
我的担忧是:
CAST 是一个用于转换(例如从字符串到日期)的函数,但在这里它用于将字符串转换为有符号数..对吗?
REGEXP,我相信是这样使用的:
(SELECT 'a' REGEXP '^[n-z]')
返回 0(零)所以乘以 15 总是 0。但是(SELECT 'p' REGEXP '^[n-z]')
返回 1,因此在这种情况下 DBMS 休眠 15 秒。
那么,现在最后一个问题是:
- 如果 tb 只有一条名为“bob”的记录,数据库会暂停 15 秒吗?
最佳答案
if tb has only one record whose name is 'bob', is the database going to pause for 15 sec?
不,使用这个查询数据库永远不会暂停,因为CAST((SELECT 'a' REGEXP '^[n-z]') AS signed) * 15
always返回 0,完全独立于您的记录:它不使用表中的任何列,'a' 是一个字符串文字。
但除此之外,您分析的是正确的。您显示的查询没有任何意义。
关于mysql - SLEEP , CAST , REGEXP 查询解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14568521/