如题,假设现在只有一个A对象,调用了dao.execute(insertSQL,SELECT LAST_INSERT_ID),那么SELECT LAST_INSERT_ID获取的是MySQL数据库为insertSQL生成的id的值,这样是没有问题的。
在高并发情况下,假设现在有两个对象A、B,现在A调用了dao.execute(insertSQL,SELECT LAST_INSERT_ID),先执行了A的insertSQL,A的SELECT LAST_INSERT_ID还没有执行,此时CPU执行B,A停止执行,B的insertSQL执行结束以后,CPU又执行了A,那么现在执行的就是A的SELECT LAST_INSERT_ID,那么这个返回值是MySQL为A生成的id,还是MySQL为B生成的id
问答
dao.execute前者执行insert语句,后者执行SELECT LAST_INSERT_ID,那么后者获取到的一定是前者的id吗?
标签:
无
7 回复
@wendal 我刚才去看了一下这个东西,确实这个东西可以实现,而且感觉这一类问题只能将事务的级别设置成为最高级别,也就是串行化,才能够解决这个问题,但是一旦设置成为串行化,那么就不允许并发,这样数据库的效率又会大大的下降
添加回复
请先登陆