MySQL条件匹配后执行SLEEP的查询语法纠错求助
正确的MySQL查询写法
首先纠正两个基础问题:
- 字段名拼写错误:
tabel_name应为table_name - 原语句语法错误:IF函数的条件部分不能直接放置未加括号的子查询,且多列结果无法直接与单个字符串做相等判断
方法一:通过核心字段判断(推荐)
你要匹配的行核心特征是table_name = 'customers',后续列均为NULL,因此可以直接用EXISTS判断是否存在该行,写法如下:
SELECT IF( EXISTS( SELECT 1 FROM information_schema.tables WHERE table_name = 'customers' LIMIT 1 ), SLEEP(10), 'a' );
方法二:精确匹配整行21列
如果必须严格匹配包含1个table_name和18个NULL的整行结果,可以将整行转换为JSON字符串后再比较,确保NULL值被正确识别:
SELECT IF( (SELECT JSON_ARRAY(table_name, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) FROM information_schema.tables LIMIT 1) = '["customers",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null]', SLEEP(10), 'a' );
原语句错误原因说明
- 子查询必须用括号
()包裹,否则MySQL无法识别其作为IF的条件参数 - 多列的查询结果是一个行集合,无法直接与单个字符串进行相等运算,必须先将多列转换为单个字符串(如JSON、拼接字符串)再做比较
内容的提问来源于stack exchange,提问作者Mr_loffy Geek
相关产品推荐
相关产品推荐

