梅林日記

雑用系プログラマの趣味とお仕事

目次

Blog 利用状況

ニュース

資格

MCAD OCP

書庫

日記カテゴリ

2007年2月23日 #

SQL ServerとOracle (その1) : DDLとトランザクション

最近SQL Server 2005の勉強をしているのですが、今まで仕事で関わってきたOracleと比較すると

色々異なる点がありそうなので、ネタにしてみようと思います。

 

一つ目はDDLとトランザクションの関係について。

 

DDLとは、表やビュー、ストアドプロシージャなどのデータベース・スキーマオブジェクトを

新規に作成したり、変更や削除を行うためのSQLコマンドで、例としては

(表の作成) CREATE TABLE table1 (id INT, value VARCHAR(50))

(表の変更) ALTER TABLE table1 ADD CONSTRAINT pk_table1 PRIMARY KEY (id)

(表の削除) DROP TABLE table1

などが挙げられます。

 

ここで、トランザクション内でDDLを発行する場合について考えます。

 

Oracleでは、DDLが発行されるとトランザクションが暗黙でコミットされるため、ロールバックすることができません。

一方SQL Serverでは、DDLもINSERT/UPDATE/DELETEなどのDMLと同様に、ロールバックすることができるようです。


BEGIN TRAN
  CREATE TABLE test1(id INT, value VARCHAR(50))
  INSERT INTO test1(id, value) VALUES(1, 'Hello World!')
  SELECT * FROM test1
ROLLBACK TRAN
go

(1 件処理されました)
 id          value                                             
 ----------- --------------------------------------------------
           1 Hello World!                                      

(1 件処理されました)

SELECT * FROM test1
go

メッセージ 208、レベル 16、状態 1、サーバー xxxxx、行 2
オブジェクト名 'test1' が無効です。


Oracle使いからすると意外な機能でした。

他のデータベースではどうなっているのか気になります。

posted @ 1:33 | Feedback (1)