oracle中commit的用法

1、commit(提交)的作用

在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。在Oracle 数据库中,
在事务提交前,只有操作数据库的这个人才能有权看到所做的事情,别人只有在最后提交完成时才能看见。

2、commit的类型

2.1 显式提交

用COMMIT 命令直接完成的提交为显式提交

格式

SQL>COMMIT;

2.2 隐式提交

用SQL 命令间接完成的提交为隐式提交

命令有以下的

ALTER,AUDIT,COMMENT,CONNECT,CREATE,DISCONNECT,DROP,EXIT,GRANT,NOAUDIT,QUIT,REVOKE,RENAME

2.3 自动提交

若把AUTOCOMMIT 设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。

格式

SQL>SET AUTOCOMMIT ON;

关于自动提交命令的选项

SYS@PROD1> set auto
SP2-0281: autocommit missing set option
Usage: SET AUTO[COMMIT] { COMMIT] { OFF | ON | IMM[EDIATE] | n }  ##n 表示成功执行n 条
DML 操作后再自动提交,n 不能小于0
SYS@PROD1> show auto      ##查看是否自动提交
autocommit OFF            ##OFF表示关闭
SCOTT@PROD1> set autocommit on   ##设置自动提交
SCOTT@PROD1> show autocommit
autocommit IMMEDIATE             ##ON和IMM都表示自动提交

3、练习

3.1 模拟commit DML语句事物提交前后区别(显式提交)

第一个终端操作

[oracle@localhost ~]$ sqlplus / as sysdba
SYS@OCPLHR1> create table test1 as select * from dual;
Table created.

SYS@OCPLHR1> insert into test1 values('b');
1 row created.

SYS@OCPLHR1> select * from test1;
D
-
X
b

SYS@OCPLHR1> commit;      ##commit之前记得在终端2上查看test1表
Commit complete.

第二个终端操作

[oracle@localhost ~]$ sqlplus / as sysdba
SYS@OCPLHR1> select * from test1;     ##commit之前
D
-
X

SYS@OCPLHR1> select * from test1;     ##commit之后
D
-
X
b

3.2 模拟DDL语句执行之后隐式事物自动提交(隐式提交)

第一个终端操作

SYS@OCPLHR1> insert into test1 values('c');    ##执行这条语句之后终端2上查看test1表,没有变化
1 row created.

SYS@OCPLHR1> create table test2 as select * from dual;    ##执行这条语句之后再去2上查看test1表,数据以及提交
Table created.

第二个终端操作

SYS@OCPLHR1> select * from test1;      ##第一条语句执行完后的查看结果
D
-
X
b

SYS@OCPLHR1> select * from test1;		##第二条语句执行完成后的查看结果
D
-
X
b
c

3.3 自动提交

3.3.1 模拟设置自动提交

第一个终端

SYS@OCPLHR1> show auto;
autocommit OFF

SYS@OCPLHR1> set autocommit on;

SYS@OCPLHR1> show autocommit
autocommit IMMEDIATE

SYS@OCPLHR1> insert into test1 values(1);
1 row created.
Commit complete.

SYS@OCPLHR1> select * from test1;
D
-
X
b
c
1

第二个终端

SYS@OCPLHR1> select * from test1;
D
-
X
b
c
1

3.3.2 模拟set auto 3(三条语句执行之后自动提交)

第一个终端

SYS@OCPLHR1> delete test2;
1 rows deleted.

SYS@OCPLHR1> set auto 3;

SYS@OCPLHR1> select * from test2;
no rows selected


SYS@OCPLHR1> insert into test2 values(1);
1 row created.

SYS@OCPLHR1> insert into test2 values(2);
1 row created.

SYS@OCPLHR1> insert into test2 values(3);
1 row created.
Commit complete.

第二个终端

SYS@OCPLHR1> select * from test2;		##第一次插入数据查看
no rows selected

SYS@OCPLHR1> select * from test2;		##第二次插入数据查看 
no rows selected

SYS@OCPLHR1> select * from test2;		##第三次插入数据查看
D
-
X
1
2
3

3.3.3 模拟set auto n 中 n 的影响

注意:n 表示成功执行n 条DML 操作后再自动提交,n不能小于0。这里的n是指DML语句的个数,而不是DML语句所影响的行数。

第一个终端

SYS@OCPLHR1> insert into test2 select * from test2;
3 rows created.

第二个终端

SYS@OCPLHR1> select * from test2;       ##数据没有改变
D
-
1
2
3

第一个终端

SYS@OCPLHR1> insert into test2 select * from test2;
6 rows created.        # 3+3

第二个终端

SYS@OCPLHR1> select * from test2;		##数据没有改变
D
-
1
2
3

第一个终端

SYS@OCPLHR1> insert into test2 select * from test2;
12 rows created		## 6+6
Commit complete.

第二个终端

SYS@OCPLHR1> select * from test2;

D
-
1
2
3
......
24 rows selected.

3.4 模拟退出sql*plus所提交的数据

注意:无论autocommit为何值,当退出sql*plus时,当前会话所有的DML操作所改变的数据都会被提交 

第一个终端

SYS@OCPLHR1> delete from test1
5 rows deleted.

SYS@OCPLHR1> delete test2;
24 rows deleted.

SYS@OCPLHR1> commit;
Commit complete.

SYS@OCPLHR1> insert into test1 values(1);
1 row created.

第二个终端

SYS@OCPLHR1> select * from test1;
no rows selected

第一个终端

SYS@OCPLHR1> insert into test1 values(2);
1 row created.
SYS@OCPLHR1> exit

第二个终端

SYS@OCPLHR1> select * from test1;
D
-
1
2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值