DML,DCL语句自动提交
1.在scott用户下建立一张表
create table test1 (id number,name varchar(20));
SQL> create table test1 (id number,name varchar(20));
表已创建。
2.插入两条记录到scott表中不提交(commit)
SQL> insert into test1 values (1,'jack');
已创建 1 行。
SQL> insert into test1 values (2,'ww');
已创建 1 行。
3.在打开另外一个会话以scott用户连进去查询test1表,因为没有提交表中没有数据
SQL> select * from test1;
未选定行
SQL>
4.再第一个会话中用alter table test1 modify name varchar(15);修改表的结构
SQL> alter table test1 modify name varchar(15);
表已更改。
此时在第二个打开的会话查看test1可以看到有两条记录说明alter table之后commit了
SQL> select * from test1;
ID NAME
---------- ------------------------------
1 jack
2 ww
SQL>
5.再第一个会话中insert 一条记录
SQL> insert into test1 values (3,'csdn');
已创建 1 行。
SQL>
此时在第二个会话中查询test1 显示的记录还是两条
SQL> select * from test1;
ID NAME
---------- ------------------------------
1 jack
2 ww
SQL>
6.在第一个会话中执行一条dcl操作
SQL> grant select on test1 to hr;
授权成功。
SQL>
在第二个会话中查看test1,表中有3条记录说明执行grant之后又进行commit了
SQL> select * from test1;
ID NAME
---------- ------------------------------
1 jack
2 ww
3 csdn
SQL>
7.总结一下执行DDL,DCL语句之后会自动commit,DDL语句包括create,alter,drop,rename,truncate,comment
DCL包括grant revoke等
8.拓展一下
再在第一个窗口insert一条记录
SQL> insert into test1 values (4,'test');
已创建 1 行。
SQL>
在第二个会话查看test1还是三条记录因为insert之后没有提交
SQL> select * from test1;
ID NAME
---------- ------------------------------
1 jack
2 ww
3 csdn
SQL>
此时用exit退出sqlplus,然后再在第二个会话查看test1哎发现有四条记录了也就是正常退出(exit)事务会commit
SQL> select * from test1;
ID NAME
---------- ------------------------------
1 jack
2 ww
3 csdn
4 test
SQL>