mysql上遇到的坑

公司用的是mysql数据库,从一开始只了解些sql语句,到现在逐渐了解数据库的一些特性,自己也踩了不少的坑,也算做一个小总结吧.持续更新哦~

配置篇

除零报错

先来讲一讲sql_mode.其中有一个配置项为ERROR_FOR_DIVISION_BY_ZERO,作用为:

在insert或者update过程中,如果数据被零除(或MOD(X,0))则产生错误(否则为警告)。如果未给出该模式,那么数据被零除时,mysql返回NULL。如果用到INSERT IGNORE或者UPDATE IGNORE中,mysql生成被零除警告,但操作结果为NULL。

然而,我在写事务的时候,仿照前人经验,写为了ifnull( q_variable_1 / q_variable_2 , 0),本来有意将除q_variable_2为0时报为NULL,导致生产环境始终报了除零(division by 0 )错误,但是测试环境由于配置不一样一直没有报错,之后检查配置了之后发现问题所在.于是乎,一顿修改重启数据库之后,再试一把,发现还是报错,此时配置已经改完,可是依旧报错.最后又重新打了存储过程,竟然可以通过了.

所以!!! 再改完配置之后,不仅需要重启数据库,存储过程也需要重新打!

group by 死循环

当配置了ONLY_FULL_GROUP_BY这个配置项时,在使用游标时,游标开始时的select后加了不完全的group by,会导致该游标无限空数据循环,也是纠结了很久之后打了断点发现的问题.