手动修改oracle数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cheng_feng_xiao_zhan/article/details/79231562

运行过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: 运行后并未给数据加上行级锁(通过物理地址去确定某一行数据),但可以编辑数据,提交事务的瞬间完成上锁、提交、解锁等动作,不易发生锁表。

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

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

猜你喜欢

转载自blog.csdn.net/cheng_feng_xiao_zhan/article/details/79231562