1.Oracle中DDL語句對事務的影響
在Oracle中,執行DDL語句(如Create Table、Create View等)時,會在執行之前自動發出一個Commit命令,並在隨後發出一個Commit或者Rollback命令,也就是說,DDL會象如下偽碼一樣執行:
Commit;DDL_Statement;
If (Error) then
Rollback;
Else
Commit;End if;
我們通過分析下面例子來看Oracle中,DDL語句對事務的影響:
Insert into some_table values(‘Before’);Creaate table T(x int);
Insert into some_table values(‘After’);Rollback;
由於在Oracle執行Create table語句之前進行了提交,而在Create table執行後也會自動發出Commit命令,所以只有插入After的行被回滾,而插入Before的行不會被回滾,Create table命令的結果也不會被回滾,即使Create table語句失敗,所進行的Before插入也會被提交。如果最後發出Commit命令,因為插入Before及Create table的操作結果已經在之前提交,所以Commit命令影響的只有插入After的操作。
2.SQL Server中DDL語句對事務的影響
在SQL Server中,DDL語句對事務的影響與其他DML語句相同,也就是說,在DML語句發出之前或之後,都不會自動發出Commit命令。
在SQL Server 2000中,對於與上面Oracle同樣的例子,最後發出Rollback後,數據庫會回滾到插入Before之前的狀態,即插入Before和After的行都會被回滾,數據表T也不會被創建。
如果最後發出Commit操作,則會把三個操作的結果全部提交。