运行代码后,数据库没有数据,手动插入数据后自增id直接跳过了前一个,这是什么原因啊?
<p>mybatis默认开启事务不会自动提交,只有调用了commit才会提交事务。你这种情况明显是事务成功执行了,而且自增ID也已生效,但事务本身没有提交,请调用mybatis的commit方法提交事务!</p>
回复 <a class="referer" target="_blank">@YonChun</a> : 根本原因就是你没有提交事务,你看看autocommit和start transaction的关系和区别你就知道原因了,其实不用在sql中加别的东西,mybatis SqlSession直接commit就可以了。很可能你的mybatis禁用了自动提交,这个跟是否整合了spring没任何关系!
回复 <a class="referer" target="_blank">@银杏卡卡</a> : 似乎解决了,但是不知道原因,我在mysql里面 start transaction 了一下,然后把项目重新打包了一下,可以插入了
回复 <a class="referer" target="_blank">@YonChun</a> : mybatis默认不自动提交事务是有原因的,因为很多时候你开启一个事务做了好几个增删改的sql,如果每个增删改查都是一个事务,那么事务执行太频繁了。
回复 <a class="referer" target="_blank">@YonChun</a> : 不要按道理,你可以试试调用commit方法就知道了,增加一行代码,不费事的,找bug有时就得尝试。
我整合了spring ,按道理来说spring会自定提交的
你插入的时间字段少一个吧,应该是字段对应个数不对导致失败,无论成功还是失败了MySQL自增ID都会有影响,这是MySQL自增ID的原理问题
不会啊,我指定了字段数目的,都能 一 一 对应,手动插入数据证明这段sql是正确的
<p>如果数据库的服务器和应用的服务器是在不同的服务器,机器的日期时间如果有比较大的差异的情况,你插入数据的时候数据的创建时间你用NOW()使用的是数据库的机器时间。</p>
如果你做数据统计,可能会遇到蛋疼的BUG。
所以我建议,不要使用NOW,统一使用 new Date()。
感谢您的建议
<p>二选一:</p>
1:代码里配置事务
2:mysql设置事务自动提交
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。