`

rowid for update

    博客分类:
  • db
 
阅读更多

有同事告诉我select ... for update不如select a.*,a.rowid from t,因为前者可能会造成锁表,后者不会锁表;

 

1. 在ORACLE中用ROWID来定位记录是最快的,比索引还快,所以如果先用SELECT ROWID选出要更新的行,放入COLLECTION中,再用 FORALL UPDATE 来批量更新可以提高速度。从这点来讲是比其他方法好一点

2. SELECT FOR UPDATE在更新前会锁定记录,这在复杂的并行查询更新程序中是必要的,比如要求数据一致性,在过滤数据时不允许他人改动数据,会用FOR UPDATE或SET TRANSACTION READ ONLY来加锁。另外像 CURSOR里的WHERE CURRENT OF CURSOR语句要求SELECT中必须加FOR UPDATE.

分享到:
评论

相关推荐

    利用rowid快速在线更新海量数据

    UPDATE T1 SET curr_count = row_t2.curr_count WHERE ROWID = row_t2.row_id; v_counter := v_counter + 1; IF (v_counter >= 1000) THEN COMMIT; v_counter := 0; END IF; END LOOP; COMMIT; END; / `...

    update语句的优化-oracle .pdf

    在本篇文档中,作者详细总结了在实际项目中针对Oracle数据库的update语句优化的四种方案。以下是对这四种方案的知识点进行详细的阐述: 1. 标准update语法优化: 当面对单表更新或较简单的SQL语句时,可以直接使用...

    update 语句优化update 语句优化update 语句优化

    FOR cr IN (SELECT a.rowid, b.join_state FROM t_join_situation a, t_people_info b WHERE a.people_number = b.people_number AND a.year = '2011' AND a.city_number = 'M00000' AND a.town_number = 'M51000...

    Oracle中在pl/sql developer修改表的2种方法

    select * from student for update student表需要操作人修改完commit之后才可以做其他的操作,否则该表会被锁住。   二、方式二 select t.*,t.rowid from student t 在pl/sql developer中右击某表,显示的就是该...

    oracle学习笔记

    在PL/SQL环境下,如果你想对查询结果进行编辑,可以使用`ROWID`或`FOR UPDATE`子句。`ROWID`允许你在不锁定表的情况下查看和编辑数据,这不会阻止其他用户对表的读写操作。而`FOR UPDATE`则会在查询时对表添加写锁,...

    修改数据库表名的命令

    for table in tables: old_name = table[0] new_name = old_name.replace('old_prefix_', 'new_prefix_') rename_query = f"RENAME TABLE `{old_name}` TO `{new_name}`" cursor.execute(rename_query) db....

    oralce 数据库 性能调优

    #### 一、利用ROWID进行迭代处理 在Oracle数据库中,ROWID是一种特殊的数据类型,它存储了指向表中某一行数据的物理地址。ROWID提供了快速定位行数据的能力,尤其是在大数据量的场景下表现尤为出色。使用ROWID进行...

    Informix出错信息中文版(33) .txt

    - 对于 Windows 环境,确保使用正确的 DLL 文件,例如 SQLW.DLL 版本应与 Informix-NET for Windows 5.01 版本兼容。 - 处理 DLL 冲突时,检查 PATH 变量中的 DLL 文件顺序,并确保高版本的 DLL 文件优先级高于旧...

    DB2兼容模式设置文档

    - **FOR UPDATE**:Oracle中的`FOR UPDATE`在DB2中可以通过`WITH RS`或`FINAL TABLE`实现锁记录的功能。 - **Create Temporary Table**:Oracle中可以直接使用`CREATE TEMPORARY TABLE`语句,在DB2中则需要使用`...

    ORA-01480STR 绑定值的结尾 Null字符缺失 的问题原因及解决办法

    UPDATE 表1 SET 字段1 = 字段1 || '后半段字符串'; ``` 这样的方法既简单又安全,不会对数据库结构造成任何改动。当然,如果愿意冒险,也可以考虑调整Oracle的内部缓冲区大小,但这需要深入理解数据库配置,并可能...

    oracle选择题题库

    18. FOR UPDATE子句:在SELECT语句中使用FOR UPDATE,可以对查询结果集中的行放置排他锁,以防止其他会话在事务处理期间修改这些行。 19. SQL关键字:调用Oracle隐式游标的关键字是SQL。 20. 锁的级别:ROW SHARE...

    oracle PL/SQL测试题目和详细答案

    - **D、隔离性**:正确,FOR UPDATE用于锁定数据行,防止其他事务并发修改。 **10. 下列说法不正确的是?** - **知识点解析:** PL/SQL自定义函数的特性和限制。 - **A、在PL/SQL自定义函数中如果包含UPDATE、...

    dblink_clob字段异常解决方案

    for rec in t1 loop update tablename t set t.detail=rec.jieshao where t.objectid=rec.objid; end loop; end; 2. 使用子查询来处理CLOB字段。例如: update student set (name, id) = (select name, id from...

    Oracle考试题.docx

    在Oracle中,`SELECT FOR UPDATE`会启动一个隐式事务,而其他的DDL(数据定义语言)和DML(数据操纵语言)操作(如INSERT、UPDATE和DELETE)都会自动启动事务。因此,选项D的`SELECT FOR UPDATE`是唯一不会建立隐式...

    Python验证Orcale数据变动通知(DCN).pdf

    cx_Oracle.OPCODE_UPDATE | cx_Oracle.OPCODE_DELETE, qos=cx_Oracle.SUBSCR_QOS_ROWIDS) ``` 在这个例子中,`DCNCallback`函数会被调用每当有插入、更新或删除操作发生在已注册的查询上。`subscribe`方法用于...

    Oracle数据库学习笔记 四

    `SELECT...FOR UPDATE OF`子句允许锁定特定行,`FOR UPDATE WAIT`子句可设置等待获取锁的超时时间。表级锁有共享、共享更新和排他三种模式。 3. **分区**: 分区是将大表物理上分割成较小、更易管理的部分,以提高...

    y2复习题及答案快快抢啊,而且分还低,答案真实!!!

    - **c) FOR UPDATE**:不完全正确,虽然可以锁定记录,但它不是用来指定要更新的具体记录。 - **d) ORDER BY**:不正确,用于对查询结果排序,而不是指定要更新的记录。 因此,正确答案是 **a) WHERE CURRENT OF**...

Global site tag (gtag.js) - Google Analytics