Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 删除/更新/插入的0行是否需要在ORACLE中提交?_Database_Oracle_Locking_Commit - Fatal编程技术网

Database 删除/更新/插入的0行是否需要在ORACLE中提交?

Database 删除/更新/插入的0行是否需要在ORACLE中提交?,database,oracle,locking,commit,Database,Oracle,Locking,Commit,在Oracle数据库中,我只是运行了一个查询,得到 已删除0行 0行DML操作是否锁定ORACLE中的表?如果是,我是否需要提交?答案是是是,是。Oracle锁定被修改的行等-这样,如果没有行受到影响,就不会发生这种情况;但Oracle也会创建一个次独占表锁,而不管是否修改任何行,它只会在提交、回滚或等效操作时释放此类锁。当然,在这种情况下,您也可以回滚—由于没有行受到影响,所以效果相同 在以下课程中轻松演示: SQL> create table xx as 2 select lev

在Oracle数据库中,我只是运行了一个查询,得到

已删除0行


0行DML操作是否锁定ORACLE中的表?如果是,我是否需要提交?

答案是是是,是。Oracle锁定被修改的行等-这样,如果没有行受到影响,就不会发生这种情况;但Oracle也会创建一个次独占表锁,而不管是否修改任何行,它只会在提交、回滚或等效操作时释放此类锁。当然,在这种情况下,您也可以回滚—由于没有行受到影响,所以效果相同

在以下课程中轻松演示:

SQL> create table xx as
  2  select level lvl from dual connect by level <= 5;

Table created.

SQL> select * from xx;

       LVL
----------
         1
         2
         3
         4
         5

SQL> select a.object_name, b.locked_mode
  2  from   user_objects a join v$locked_object b
  3  on a.object_id = b.object_id;

no rows selected

SQL> delete from xx where lvl = 10;

0 rows deleted.

SQL> select a.object_name, b.locked_mode
  2  from   user_objects a join v$locked_object b
  3  on a.object_id = b.object_id;


OBJECT_NAME     LOCKED_MODE
--------------- -----------
XX                        3

SQL> commit;

Commit complete.

SQL> select a.object_name, b.locked_mode
  2  from   user_objects a join v$locked_object b
  3  on a.object_id = b.object_id;

no rows selected

答案是肯定的,肯定的。Oracle锁定被修改的行等-这样,如果没有行受到影响,就不会发生这种情况;但Oracle也会创建一个次独占表锁,而不管是否修改任何行,它只会在提交、回滚或等效操作时释放此类锁。当然,在这种情况下,您也可以回滚—由于没有行受到影响,所以效果相同

在以下课程中轻松演示:

SQL> create table xx as
  2  select level lvl from dual connect by level <= 5;

Table created.

SQL> select * from xx;

       LVL
----------
         1
         2
         3
         4
         5

SQL> select a.object_name, b.locked_mode
  2  from   user_objects a join v$locked_object b
  3  on a.object_id = b.object_id;

no rows selected

SQL> delete from xx where lvl = 10;

0 rows deleted.

SQL> select a.object_name, b.locked_mode
  2  from   user_objects a join v$locked_object b
  3  on a.object_id = b.object_id;


OBJECT_NAME     LOCKED_MODE
--------------- -----------
XX                        3

SQL> commit;

Commit complete.

SQL> select a.object_name, b.locked_mode
  2  from   user_objects a join v$locked_object b
  3  on a.object_id = b.object_id;

no rows selected

谢谢这非常令人惊讶,因为没有数据发生变化。谢谢!这非常令人惊讶,因为没有任何数据发生变化。