我使用的是隔离级别的Microsoft SQL Server 2005数据库READ_COMMITTED和READ_COMMITTED_SNAPSHOT=ON.
现在我想用:
SELECT * FROM <tablename> FOR UPDATE
Run Code Online (Sandbox Code Playgroud)
...以便在尝试访问同一行"FOR UPDATE"时阻止其他数据库连接.
我试过了:
SELECT * FROM <tablename> WITH (updlock) WHERE id=1
Run Code Online (Sandbox Code Playgroud)
...但是即使选择"1"以外的ID,这也会阻止所有其他连接.
SELECT FOR UPDATE对于Oracle,DB2,MySql而言,这是正确的提示吗?
编辑2009-10-03:
这些是创建表和索引的语句:
CREATE TABLE example ( Id BIGINT NOT NULL, TransactionId BIGINT,
Terminal BIGINT, Status SMALLINT );
ALTER TABLE example ADD CONSTRAINT index108 PRIMARY KEY ( Id )
CREATE INDEX I108_FkTerminal ON example ( Terminal )
CREATE INDEX I108_Key ON example ( TransactionId )
Run Code Online (Sandbox Code Playgroud)
很多并行进程都这样做SELECT:
SELECT * …Run Code Online (Sandbox Code Playgroud) sql t-sql sql-server sql-server-2005 read-committed-snapshot
我有这种情况,在航空公司网站上(使用Java)两个独立的客户同时发送两个请求,以预订
从纽约到芝加哥的同一航空公司的同一个座位.我正在使用oracle数据库并且已提交隔离级别.我的问题是oracle数据库是否提供了处理这种并发场景的任何解决方案?我所知道的是,当第一个事务DML语句被触发时,它将在受影响的行上获得锁定,并在事务完成时释放,即在发出回滚或commit时发布.但是一旦提交完成,第二个请求将在第一个完成后立即继续并将覆盖第一个.所以它没有帮助?
在Java中是的我可以处理将我的db类作为单例并在正在执行更新的方法上使用synchronized关键字.但是想知道我们在数据库级别本身是否存在这种问题?可序隔离级别可以帮助.但不确定?