DDL和DML语句定义:
数据定义,DDL(Data Definition Language)
DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,大多在建立表时使用
需要排他访问权限
CREATE、ALTER、DROP和PURGE:创建、修改、删除和清空方案(schema)对象
RENAME:修改对象名称 TRUNCATE:截断表
DCL(Data Control Language):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。
在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL
CREATE与PURGE未实验,因为不知道怎么实验
第一:DDL需要排他访问权限
drop 和 alter table
会话1:DML不提交
SQL> select count(*) from test2;
COUNT(*)
———-
145503
SQL> delete test2;
145503 rows deleted
会话2:
SQL> drop table test2;
drop table test2
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
SQL> alter table test2 modify(owner varchar(10));
alter table test2 modify(owner varchar(10))
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
rename table
会话1:DML不提交
SQL> delete test3;
72752 rows deleted
会话2:
SQL> rename test3 to test2;
rename test3 to test2
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
SQL> truncate table test3;
truncate table test3
ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired
第二:DCL不需要排他权限
接上面实验的会话2:
SQL> grant select on test3 to scott;
Grant succeeded
第三:DDL语句导致未提交的事务提交
会话1:
SQL> set time on
18:50:52 SQL> create table test5(a varchar2(10));
Table created
18:51:09 SQL> insert into test5 values(1);
1 row inserted
18:51:25 SQL> insert into test5 values(2);
1 row inserted
18:51:28 SQL>
18:51:43 SQL> create table test6(b varchar2(89));
Table created
此时在会话2查询:会话1执行完create语句后会话2可以查到数据–因为数据已经提交,不再受事务隔离等级影响而不可见
18:51:33 SQL> select * from test5;
A
———-
18:51:38 SQL>
18:52:05 SQL> select * from test5;
A
———-
1
2
18:52:06 SQL>
返回会话1查询:使用rollback;数据依然在,侧面证明事务已经提交
18:52:00 SQL>
18:52:16 SQL> select * from test5;
A
———-
1
2
18:52:22 SQL> rollback;
Rollback complete
18:52:26 SQL> select * from test5;
A
———-
1
2
18:52:28 SQL>
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net