DELETEとTRUNCATE TABLEの違いを試す |
DELETEによる削除とTRUNCATE TABLEによる削除で実際にIDカウンタの値が変わるかどうか、実験してみましょう。
- テーブルにIDフィールドを設ける - まず、EnterpriseManagerでテーブル「商品dmy」をデザインビューで開き(「操作」→「テーブルのデザイン」)、先頭にフィールド(列)を1つ挿入します。列名は「Id」としておきましょう。 その列を主キーに設定し、プロパティを以下のように設定します。
IDENTITY:「はい」 IDENTITYシード:1 IDENTITYインクリメント:1
これで、新たに追加した「Id」フィールドは「値1をシード値(初期値)として1ずつ自動増加するIDフィールド」になります。
- 実験用テーブルを作って全件削除する - 次に、SELECT~INTO文を使って、「商品dmy」テーブルと同じ内容のテーブル「商品dmy1」と「商品dmy2」を作成します(ex08.sql)。
SELECT * INTO 商品dmy1 FROM 商品_dmy SELECT * INTO 商品dmy2 FROM 商品_dmy
作成した「商品dmy1」に対してDELETE命令、「商品dmy2」に対してはTRUNCATE TABLE命令を使って、それぞれのレコードを削除します(ex09.sql)。
DELETE 商品dmy1 TRUNCATE TABLE 商品dmy2
- 新規レコードを追加する - これで、双方のテーブルはレコードが0件になります。続いて、INSERT命令を使って2つのテーブルに同じ内容の新たなレコードを1件追加します(ex10.sql)。
INSERT INTO 商品_mr (商品ID, 品名, 販売単価, 仕入単価, 在庫) VALUES (998501, 'ニワトリくん目覚まし時計', 1800, 1280, 10)
EnterpriseManagerで2つのテーブルを開き(「操作」→「テーブルを開く」→「全行を返す」)、列「Id」の値を見比べてみましょう。
DELETE命令でレコードを削除した「商品dmy1」の方は、削除前のIDカウンタの値が残っているためにそれが引き継がれ「38」となっています※3。一方TRUNCATE TABLE命令でレコードを削除した「商品dmy2」ではIDカウンタがリセットされるため、その値がシード値の「1」に戻されています。
※3 「38」という値はあくまで筆者の執筆時の環境に基づく値です。実際に各自の環境で試した場合、レコード件数やそれ以前の挿入処理などによって異なる値になる場合があります。
|
|
|