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文を実行する。
1 2 3 4 | CREATE TABLE dbo.test_code ( id INTEGER PRIMARY KEY , value NVARCHAR(20) ) |
2) 作成したtest_codeテーブルにデータを追加する。
1 | INSERT INTO dbo.test_code VALUES (1, N'テスト1') |
3) ロールバックを実行する。
1 | ROLLBACK |
4) 以下のように、作成したtest_codeテーブルを確認すると、作成した「dbo.test_code」が存在しない旨のメッセージが表示される。
1 | SELECT * FROM dbo.test_code |
5) CREATE TABLE文を再度実行する。
1 2 3 4 | CREATE TABLE dbo.test_code ( id INTEGER PRIMARY KEY , value NVARCHAR(20) ) |
6) 作成したtest_codeテーブルにデータを再度追加する。
1 | INSERT INTO dbo.test_code VALUES (1, N'テスト1') |
7) コミットを実行する。
1 | COMMIT |
8) 以下のように、作成したtest_codeテーブルを確認すると、作成した「dbo.test_code」が存在し中身が確認できる。
1 | SELECT * FROM dbo.test_code |
DROP TABLE文のロールバック/コミット
DROP TABLE文を実行した後のロールバック/コミット後の結果は、以下の通り。
1) DROP TABLE文を実行する。
1 | DROP TABLE dbo.test_code |
2) ロールバックを実行する。
1 | ROLLBACK |
3) 以下のように、作成したtest_codeテーブルを確認すると、作成した「dbo.test_code」がまだ存在し中身が確認できる。
1 | SELECT * FROM dbo.test_code |
4) DROP TABLE文を再度実行する。
1 | DROP TABLE dbo.test_code |
5) コミットを実行する。
1 | COMMIT |
6) 以下のように、作成したtest_codeテーブルを確認すると、作成した「dbo.test_code」が削除されていることが確認できる。
1 | SELECT * FROM dbo.test_code |
要点まとめ
- SQL Serverの場合、自動コミットを無効にした状態でDDL文(CREATE TABLE文、DROP TABLE文等)を実行した後でコミットを実施しないと、更新内容が確定されない。