oracle在ado.net级别事务为提交之前,不会对表加锁吗? 本帖最后由 x_wy46 于 2013-01-14 14:33:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Oracle 任何的事务操作 不会阻塞查询。 那类似于这样一个操作,是怎么执行的?第一步:select max(id),第二部:利用第一步生成的max(id)做为id插入到表中那么当正在执行第二步时候,另外一个用户select max(id),会不会造成重复的ID呢? oracle和sqlserver事务处理机制不同。sqlserver中如果一个事务的insert语句还没有提交,另外一个事务试图取max(id)时会被阻塞,因为他默认是读取所有已提交事务,确保了全局一致性。oracle的话即使有一个事务的insert没有提交,另外一个事务取max(id)时会取那条insert之前的数据库的maxid。insert提交以后,你取到的那条id已经不是目前数据库的最大id了。多个事务一起读取会产生重复问题。但你如果只是想insert之后取刚才insert的那个id,这么写是没问题的,这次insert的记录确实是本次事务中的maxid。 那不就是没法先取max(id)再insert了 是的,oracle中不建议maxid这种写法,要么是用sequence自增,要么是guid oracle下数据文件.DBF的作用 请问创建表空间语句中的logging是如何体现作用的? 查过好多网站,都没得到答案----关于不能连接的问题: 参数问题 ■■ORACLE的PROC生成C文件后,如何编译成EXE?用MAKE不行呀!请帮忙解决,多谢!■■ cpu占有率 在操作系统启动的时候不启动Oracle,因为检测很慢,怎么做? create database link的问题。 ORA-12203 TNS:unable to connect to destination 表不能删除 ? 在线等...where中的case when .. 求高手..急 job定时更新时效的需求,求思路
第一步:select max(id),
第二部:利用第一步生成的max(id)做为id插入到表中那么当正在执行第二步时候,另外一个用户select max(id),会不会造成重复的ID呢?
sqlserver中如果一个事务的insert语句还没有提交,另外一个事务试图取max(id)时会被阻塞,因为他默认是读取所有已提交事务,确保了全局一致性。oracle的话即使有一个事务的insert没有提交,另外一个事务取max(id)时会取那条insert之前的数据库的maxid。
insert提交以后,你取到的那条id已经不是目前数据库的最大id了。多个事务一起读取会产生重复问题。
但你如果只是想insert之后取刚才insert的那个id,这么写是没问题的,这次insert的记录确实是本次事务中的maxid。
那不就是没法先取max(id)再insert了