SQLite データベースの列を削除する

Vaibhav Vaibhav 2023年6月21日
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 を使用して新しいテーブルが出力されます。

著者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

関連記事 - SQLite Database