如何在mysql中将sql模式变量设置为局部变量

时间:2017-03-12 02:08:22

标签: mysql variables set

我想要的是,我想将sql_mode变量设置为局部变量,而不是作为会话或全局变量。这样做的原因是我想在执行一个查询后消除sql模式变量的更改。会议和全球会议都运作良好,但这不是我想要的。全局一个永远保持sql模式为空。第一个会话将sql模式保留为空模式,直到连接关闭。我想要的是,保持sql模式,直到只执行采石场。

mysql> set global sql_mode='';
mysql> set session sql_mode='';

mysql查询: -

SELECT tc_exe_grp_num,tcs.tc_tc_id,tcs.tcs_id  
FROM tc_exe_res tcer 
INNER JOIN tcs tcs 
ON tcs.tcs_id = tcer.tcs_tcs_id  
WHERE tcs.tc_tc_id='1' 
AND tcs.tc_tc_id='1' 
GROUP BY tc_exe_grp_num 
ORDER BY tc_exe_grp_num ;

got the idea from this article

请帮帮我。

2 个答案:

答案 0 :(得分:1)

@@sql_mode是会话变量,而不是局部变量。

可以检索sql_mode的当前设置,并将其保存在用户定义的变量中,然后将sql_mode设置回原始设置。

例如:

 -- save current setting of sql_mode in user defined variable
 -- change sql_mode to desired setting
 SET @SAVE_sql_mode = @@sql_mode ;
 SET @@sql_mode = 'NO_ENGINE_SUBSTITUTION' ; 

 -- subsequent operations run under new setting of sql_mode
 SELECT '...';


 -- set sql_mode back to saved setting
 SET @@sql_mode = @SAVE_sql_mode ;  

答案 1 :(得分:0)

我找不到直接的答案,但有一个解决方案,

首先将“sql模式”设置为空的并且在执行quarry之后将“sql模式”设置为以前具有的值,以下面的方式尝试,

    set session sql_mode='';

    SELECT tc_exe_grp_num,tcs.tc_tc_id,tcs.tcs_id FROM tc_exe_res tcer INNER JOIN tcs tcs ON tcs.tcs_id = tcer.tcs_tcs_id WHERE tcs.tc_tc_id='1' AND tcs.tc_tc_id='1' group by tc_exe_grp_num ORDER BY tc_exe_grp_num ;

    set session sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';