JAVA-JDBC连接数据库一个问题:我采用通过事务提交添加属性值,为什么没有虽然没有添加,但是ID自动增加

JAVA-JDBC连接数据库一个问题:我采用通过事务提交添加属性值,为什么没有虽然没有添加,但是ID自动增加,第1张

首先自增ID本来就被设计成为不参与数据库事务的,原因是什么呢?为了防止ID生成阻塞和防止ID错乱,因为对了一张表来说,不是只有你一个线程在申请ID,其他的新增线程了也在申请ID,假设你在事务中第一次申请到了ID=1,但这时你的事务并没提交,也就是这个等于1的ID现在并没有真正入库,想想这时别人的进程也去申请同一个表的ID时,ID生成器该给他1还是2?当然是2啦!如果你这时你回滚你的事务,假设事务把ID=1回滚了,给回ID生成器,ID生成器还能把它给出去别人用么?肯定不行啦,为啥,如果这时那个上次拿到2的线程这次又去拿,不是要拿到1了?说好的自增呢?!也许你会说可以等你下次申请ID时给你呀,把3给刚刚那个拿了2的呀,不好意思,数据库会话(SqlSession)一关,谁记得你呀!

用for循环行吗?
int update(PreparedStatementCreator
psc, KeyHolder
generatedKeyHolder) throws DataAccessException
MYSQL可以这样
INSERT INTO table (field1,field2,field3) VALUES ('a',"b","c"), ('a',"b","c"),('a',"b","c");


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12799481.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-28
下一篇 2023-05-28

发表评论

登录后才能评论

评论列表(0条)

保存