mysql - SLEEP , CAST , REGEXP 查询解释

标签 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); # 这是一个棘手的问题 对我来说。

我相信事情是: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/

相关文章:

php - mysql:事务?插入和更新

mysql - 如何将 2 列合并为一列并使用该合并列来保存多个值

php - 如何使用 PHP MySQL 连接到新数据库

sql - 按两个平均值之间的差值排序

php - 存储到 MySQL 数据库之前的文本验证

mysql - 当我从另一个表中选择计数时,左连接不起作用

PHP Cron Job--> 将 MySQL 中的日期与当前日期加 7 天进行比较并发送电子邮件无法正常工作

php - 从 mysql 迁移到 PDO,不连接到 mysql 服务器

php - 将查询返回的数据库列值排序为数值

php - Wordpress 循环 - Meta_Key 的唯一值