12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
ADADADADAD
mysql数据库 时间:2024-11-26 22:17:15
作者:文/会员上传
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
12-09
MySQL存储过程环境 5.6.14drop procedure if exists p;DELIMITER $$CREATE PROCEDURE `p` ()BEGINstart transaction;if(select 10 from dual where 1=1 < 5 ) then select
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
MySQL存储过程
环境 5.6.14
drop procedure if exists p;
DELIMITER $$
CREATE PROCEDURE `p` ()
BEGIN
start transaction;
if(select 10 from dual where 1=1 < 5 ) then
select 'true';
else
select 'false';
end if;
commit;
END $$
DELIMITER ;
call p
有时候为了省事,在if中使用子查询返回一个值,然后做比较.
就像上述的测试过程.
但是实际执行的时候,过程返回true.基本上忽略了select 的结果,都进入了true的分支.
我觉得MySQL是把where后面的判断作为了比较的内容,上述过程比较的似乎是 if ((1=1)<5),所以无论查询的是什么,都进入了true的分支
解决这个问题的方法也很简单.给子查询加括号
子查询加了括号之后的结果,就正确了,如下图所示.
11-20
11-19
11-20
11-20
11-20
11-19
11-20
11-20
11-19
11-20
11-19
11-19
11-19
11-19
11-19
11-19