手动修改oracle数据

本文详细介绍了 Oracle 数据库中 FOR UPDATE 语句的工作原理及其应用场景。解释了如何使用 FOR UPDATE 对数据行加锁,确保数据的一致性和完整性。同时对比了 FOR UPDATE 与 ROWID 在锁定机制上的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行过for update的语句后须Commit。
For update那是一种行级锁,一旦用户对某个行施加了行级加锁,则该用户可以查询也可以更新被加锁的数据行,其它用户只能查询但不能更新被加锁的数据行.如果其它用户想更新该表中的数据行,则也必须对该表施加行级锁.即使多个用户对一个表均使用了共享更新,但也不允许两个事务同时对一个表进行更新,真正对表进行更新时,是以独占方式锁表,一直到提交或复原该事务为止。行锁永远是独占方式锁。
只有当出现如下之一的条件,便释放共享更新锁:
(1)、执行提交(COMMIT)语句;
(2)、退出数据库(LOG OFF)
(3)、程序停止运行。
①打开PL/SQL管理工具,以便执行查询语句及修改信息。

②编写表的查询语句及条件,然后加上"FOR UPDATE","FOR UPDATE"是获得OACLE的修改权限,执行这条查询语句,查询出对应的记录
如:SELECT T.ROWID, T.LAST_NAME_CN, T.FIRST_NAME_CN
  FROM TABLE_CESHI T
 WHERE T.LAST_NAME_CN = '朱'
   AND T.FIRST_NAME_CN LIKE '%娜%'
   FOR UPDATE;
③点击记录列表上面的锁状形图标,图案显示为开锁状态,说明已经获得手动操作的权限。
④然后修改列表中的某条或某些数据,如:将下面的"FIRST_NAME_CN"中的"娜娜"修改为"娜"。
⑤修改完成后,点击列表上面的对号图标提交,点击完成后对号图标已变成不可点击的灰色。

⑥最后再次点击列表上面的锁状形的图标,关闭手动修改数据的权限。

⑦提交事务Commit。


另注: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.
for update:当语句运行时,会在对应行(where子句)加上行级锁,无where子句等于全表上锁。若遇到客户端断网、测试人员忘记提交\回滚事务,则会发生锁表。 
rowid: 运行后并未给数据加上行级锁(通过物理地址去确定某一行数据),但可以编辑数据,提交事务的瞬间完成上锁、提交、解锁等动作,不易发生锁表。

希望对你有帮助,祝你有一个好心情,加油!

若有错误、不全、可优化的点,欢迎纠正与补充!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值