SQL Serverの場合、自動コミットを無効にした状態でDDL文(CREATE TABLE文、DROP TABLE文等)を実行した後でコミットを実施しないと、更新内容が確定されない。
今回は、SQL Serverで、自動コミットを無効にした状態でDDL文を実行してみたので、その結果を共有する。
前提条件
下記記事の「前提条件」の内容が完了していること。
また、SSMSでログイン後「Tools」メニューから「Options」を選択し、「Query Execution」-「SQL Server」-「ANSI」を選択すると、以下の画面のように、自動コミットを無効にする「SET IMPLICIT_TRANSACTIONS」のチェックがONになっていること。
CREATE TABLE文のロールバック/コミット
CREATE TABLE文を実行した後のロールバック/コミット後の結果は、以下の通り。
1) CREATE TABLE文を実行する。
CREATE TABLE dbo.test_code ( id INTEGER PRIMARY KEY , value NVARCHAR(20) )
2) 作成したtest_codeテーブルにデータを追加する。
INSERT INTO dbo.test_code VALUES (1, N'テスト1')
3) ロールバックを実行する。
ROLLBACK
4) 以下のように、作成したtest_codeテーブルを確認すると、作成した「dbo.test_code」が存在しない旨のメッセージが表示される。
SELECT * FROM dbo.test_code
5) CREATE TABLE文を再度実行する。
CREATE TABLE dbo.test_code ( id INTEGER PRIMARY KEY , value NVARCHAR(20) )
6) 作成したtest_codeテーブルにデータを再度追加する。
INSERT INTO dbo.test_code VALUES (1, N'テスト1')
7) コミットを実行する。
COMMIT
8) 以下のように、作成したtest_codeテーブルを確認すると、作成した「dbo.test_code」が存在し中身が確認できる。
SELECT * FROM dbo.test_code
DROP TABLE文のロールバック/コミット
DROP TABLE文を実行した後のロールバック/コミット後の結果は、以下の通り。
1) DROP TABLE文を実行する。
DROP TABLE dbo.test_code
2) ロールバックを実行する。
ROLLBACK
3) 以下のように、作成したtest_codeテーブルを確認すると、作成した「dbo.test_code」がまだ存在し中身が確認できる。
SELECT * FROM dbo.test_code
4) DROP TABLE文を再度実行する。
DROP TABLE dbo.test_code
5) コミットを実行する。
COMMIT
6) 以下のように、作成したtest_codeテーブルを確認すると、作成した「dbo.test_code」が削除されていることが確認できる。
SELECT * FROM dbo.test_code
要点まとめ
- SQL Serverの場合、自動コミットを無効にした状態でDDL文(CREATE TABLE文、DROP TABLE文等)を実行した後でコミットを実施しないと、更新内容が確定されない。