我有一个查询:
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 '^[nz]') AS signed) 乘以 15。
我的担忧是:
CAST 是一个转换函数(例如从字符串到日期),但在这里它用于将字符串转换为带符号的数字..对吗?
REGEXP,我相信是这样使用的:
(SELECT 'a' REGEXP '^[n-z]')
返回 0(零),所以乘以 15 总是 0。但(SELECT 'p' REGEXP '^[n-z]')
返回 1,所以在这种情况下 DBMS 会休眠 15 秒。
所以,现在最后一个问题是:
- 如果 tb 只有一条名为“bob”的记录,数据库会暂停 15 秒吗?