当前位置: 代码迷 >> Oracle开发 >> 并发环境下,向同一张表中插入多条数据,该如何处理
  详细解决方案

并发环境下,向同一张表中插入多条数据,该如何处理

热度:79   发布时间:2016-04-24 06:30:36.0
并发环境下,向同一张表中插入多条数据
并发环境下,向同一张表中插入多条数据(主键自增),需要锁表吗,如果锁表的话,其他的用户插入时等待多长时间会失败,还是会立即失败;如果不锁表有什么办法进行控制?请各位有这方面经验的开发人员畅所欲言,不吝赐教。
------解决思路----------------------
单纯做INSERT,无论哪种数据库默认应该都是锁记录的。
而且分批自增值不属于事务内容。
所以各自分配不同的ID,插入并锁记录,不存在冲突,都可以成功。

这些都属于数据库的基本功能,不需要控制。
除非你一个事务中插入的记录非常多,导致记录锁升级为页锁、表锁,就会有等待,这会降低性能。
如果事务执行时间很长,导致等待超时,这时才会导致部分会话失败。
------解决思路----------------------
ORACLE数据库生成主键一般使用序列产生,只要保证每次生成主键都是从同一个序列中读取的,就不会产生主键重复的问题
------解决思路----------------------
写数据时肯定会加表级锁,你可以试一下,你insert 一条记录,不要提交,你在另外一个会话中 drop 这张表,会提示资源忙。

但是你在另一个会话中,也 insert 一条记录,就不会等待,马上就可以提交。

你所有自增列(应该是 TR + SEQ实现的),也没有关系, 第一个会话,你先写 ID = 1 ,第二个会话后写了个 ID = 2 ,如果你第一个会话又 rollback 了,那么表中只有 ID = 2 的记录。 互不影响 。 这一切,都是 ORACLE 自行控制的,不会去管他。
  相关解决方案