SQLite データベースの列を削除する
新しい列を追加すると、デフォルト値が提供されます。 既存の列を削除すると、ユースケースによっては、すべての値が削除され、バックアップされることさえあります。
この記事では、いくつかの関連する例を使用して、SQLite データベース テーブルから列を削除する方法について説明します。
SQLite データベース テーブルから列を削除する
2つの方法で SQLite データベース テーブルから列を削除できます。
ALTER TABLE
ステートメントを使用して列を削除する
SQL は、既存のデータベース テーブル内の既存の列を追加、削除、および変更するために使用できる ALTER TABLE
ステートメントを提供します。 以下は、列を削除するために自由に使用できる 2つの構文です。
構文:
ALTER TABLE <table_name> DROP COLUMN <column_name>;
ALTER TABLE <table_name> DROP <column_name>;
上記の SQL ステートメントは、列 column_name
を既存のテーブル table_name
から削除します。 DROP
キーワードは、実行時に列が削除されることを示します。
デモについては、次の SQL スクリプトを参照してください。
CREATE TABLE students (
id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
age INT NOT NULL,
gender TEXT NOT NULL
);
SELECT "Before Removal";
SELECT "--------------";
SELECT name FROM PRAGMA_TABLE_INFO("students"); -- Display all names columns
ALTER TABLE students DROP COLUMN last_name; -- Removing [last_name] column
SELECT "";
SELECT "After Removal";
SELECT "-------------";
SELECT name FROM PRAGMA_TABLE_INFO("students"); -- Display all names columns
出力:
Before Removal
--------------
id
first_name
last_name
age
gender
After Removal
-------------
id
first_name
age
gender
上記の SQL スクリプトは、選択したデータベースに新しいテーブル students
を作成します。 次に、新しく作成されたテーブルのすべての列名を出力し、ALTER TABLE
ステートメントを使用して last_Name
列を削除します。
最後に、すべての列名を再び出力します。 上記の出力から、last_name
列がテーブルに存在しなくなり、ALTER TABLE
ステートメントによって正常に削除されたことがわかります。
新しいテーブルを作成して列を削除する
このアプローチは非常に単純で、以前のアプローチよりも時間がかかります。 アイデアは、すべての新しい列を含む新しいテーブルを最初から作成することです (削除する列はこのテーブルの一部ではありません)。
次に、必要に応じて、古いテーブルからこの新しいテーブルにすべてのデータをコピーします。 最後に、古いテーブルを削除または削除し、必要に応じて新しいテーブルを使用します。
例については、次の SQL スクリプトを参照してください。
-- creating the old table
CREATE TABLE students (
id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
age INT NOT NULL
);
-- inserting some data into the old table
INSERT INTO students VALUES (1, "Stefan", "Salvatore", 13);
INSERT INTO students VALUES (2, "Damon", "Salvatore", 14);
INSERT INTO students VALUES (3, "Elena", "Gilbert", 12);
INSERT INTO students VALUES (4, "Caroline", "Forbes", 12);
INSERT INTO students VALUES (5, "Bonnie", "Bennett", 13);
-- printing old table
SELECT "Students";
SELECT "--------";
SELECT * FROM students;
SELECT "";
-- creating new table
CREATE TABLE new_students (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INT NOT NULL
);
-- inserting data from an old table into the new table
INSERT INTO new_students SELECT id, first_name, age FROM students;
-- printing new table
SELECT "New Students";
SELECT "--------";
SELECT * FROM new_students;
SELECT "";
-- dropping or deleting the old table
DROP TABLE students;
-- renaming the new table to the old table's name
ALTER TABLE new_students RENAME TO students;
-- printing new table
SELECT "Students";
SELECT "--------";
SELECT * FROM students;
SELECT "";
出力:
Students
--------
1|Stefan|Salvatore|13
2|Damon|Salvatore|14
3|Elena|Gilbert|12
4|Caroline|Forbes|12
5|Bonnie|Bennett|13
New Students
--------
1|Stefan|13
2|Damon|14
3|Elena|12
4|Caroline|12
5|Bonnie|13
Students
--------
1|Stefan|13
2|Damon|14
3|Elena|12
4|Caroline|12
5|Bonnie|13
上記の SQL スクリプトは、最初にテーブル students
を作成します。 古いテーブルを模倣しようとします。 次に、INSERT INTO
ステートメントを使用して新しく作成されたテーブルにいくつかの行を挿入し、テーブルの内容を出力します。
これで、new_students
という新しいテーブルが作成されました。 新しいテーブルを模倣します。 new_students
テーブルのスキーマは students
テーブルとは異なることに注意してください。 last_name
列はありません。
次に、INSERT INTO
ステートメントを使用して、students
テーブルのすべての行が new_students
に挿入されます。
last_name
を除いて、他のすべてが挿入されることに注意してください。 さらに、SELECT
ステートメントの列の順序は、あるテーブルから別のテーブルにデータを挿入する際に重要であり、挿入後に新しいテーブルが出力されます。
古いテーブルは不要になったので、students
テーブルは DROP TABLE
ステートメントを使用して削除され、new_students
テーブルは ALTER TABLE
ステートメントを使用して students
に名前が変更されます。 最後に、新しい名前 students
を使用して新しいテーブルが出力されます。