Mysql数据库问题

记录关于Mysql中遇到的问题。

问题一:后台报错:Lock wait timeout exceeded; try restarting transaction

可能原因:数据库中数据处于只读状态,不准update。

解决方式:杀死该项进程即可。

具体方式:我使用的数据库可视化工具为Navicate。点击“查询” -->“新建”,然后输入语句:“select * from information_schema.innodb_trx”,这样就得到只读进程,然后找到进程id号:trx_mysql_thread_id,然后输入“kill ” +id号,即可解决此问题。

 

问题二:使用gruop by时,报错this is incompatible with sql_mode=only_full_group_by

可能原因:sql语句写法不规范导致的。具体表现是,在mysql可视化工具中,可以运行,但是在项目sql语句中就无法运行。

解决方式:规范化书写sql语句。例如:sql语句:select 字段A   from 表a  group by 字段A,字段B  ,在可视化工具中是可以执行的,但是在项目中却会报错。规范的写法是:select 字段A,字段B  from 表a  group by 字段A,字段B。group by 后面按照那些字段分类,那么就必须要 select 那些字段。

 

问题三:锁表的问题。某条sql语句执行时,会超时,并导致数据库中该条数据出现不能操作的情况,而其他sql语句可以正常执行。

可能原因:事务的开启与关闭出现了问题。

解决方法:应当尽量避免使用事务嵌套,尤其是不能在事务嵌套中操作同一张表,否则就容易出现这种情况。因为外层事务还未完成,就被内层事务关闭了资源。

 

问题四:基本数据类型与基本封装类的区别问题。

在项目中遇到一个问题,无法为一个int类型赋值为0,当时百思不得其解。最后才发觉是Bean对象中给该字段定义为int类型,改正为Integer包装类型,就可以赋值为0了。

基本数据类型在mysql数据库中若为null,那么返回的默认值就是其默认返回类型,而包装类相当于对象,是可以返回null的。在实际项目中,我就利用这一点差别解决一些特定的需求。比如对数据敏感的情况下,返回null,表示没有采集到数据;返回0,则表示采集到数据,但是数据值为0,若直接定义为基本数据类型,就无法确定到底是没有采集到数据,还是数据值为零,是有一些细小的差别的。

posted @ 2017-12-07 21:41  井井凉风  阅读(402)  评论(0编辑  收藏  举报