SQLiteは、SQL標準の限定されたサブセットALTER TABLE
をサポートします 声明。
SQLiteでは、ALTER TABLE
コマンドを使用すると、ユーザーはテーブルの名前を変更したり、既存のテーブルに新しい列を追加したりできます。
列を追加
ADD COLUMN
構文は、既存のテーブルに新しい列を追加するために使用されます。
Artists に列を追加しましょう テーブル:
ALTER TABLE Artists ADD COLUMN Bio TEXT;
次に、.schema
を使用してテーブルを確認します コマンド:
sqlite> .schema Artists CREATE TABLE Artists( ArtistId INTEGER PRIMARY KEY, ArtistName TEXT NOT NULL , Bio TEXT);
ADD COLUMN
を使用する場合は、次の制限が適用されます。 SQLiteの構文:
- 列に
PRIMARY KEY
がない可能性があります またはUNIQUE
制約。 - 列のデフォルト値は
CURRENT_TIME
ではない可能性があります 、CURRENT_DATE
、CURRENT_TIMESTAMP
、または括弧内の式。 -
NOT NULL
の場合 制約が指定されている場合、列にはNULL
以外のデフォルト値が必要です。 。 - 外部キー制約が有効で、
REFERENCES
の列がある場合 句が追加された場合、列のデフォルト値は NULL である必要があります 。
テーブルの名前を変更する
RENAME TO
構文を使用すると、テーブルの名前を変更できます。
テーブルの名前を変更しましょう:
ALTER TABLE Albums RENAME TO Albums1;
そして、.tables
で確認してください コマンド:
sqlite> .tables Albums1 Artists
これで、それ以降の操作では、テーブルの新しい名前を使用する必要があります。したがって、次のようなデータを選択できます:
SELECT AlbumName, Year FROM Artists AS a INNER JOIN Albums1 AS r ON a.ArtistId = r.ArtistId WHERE a.ArtistName = 'Joe Satriani';
AlbumName Year -------------------- -------------------------------------------------- Surfing with the Ali 1987 Flying in a Blue Dre 1989 Black Swans and Worm 2010
列の更新または削除
SQLiteはDROP COLUMN
などの句をサポートしていません 、ALTER COLUMN
、およびADD CONSTRAINT
、SQL標準の一部です。
ただし、SQLiteでこれらのことを行う方法は他にもあります。
列を変更する
Year
の名前を変更するとします
ReleaseDate
への列 。また、NOT NULL
を削除します 制限。
これを行うには、(新しい列定義を使用して)新しいテーブルを作成し、古いテーブルのデータをテーブルに入力します。完了したら、古いテーブルを削除し、元の名前を反映するように新しいテーブルの名前を変更します。
新しいテーブルを作成する
まず、新しいテーブルを作成します(ReleaseDate
に注意してください) Year
の代わりに 。
CREATE TABLE Albums( AlbumId INTEGER PRIMARY KEY, AlbumName TEXT NOT NULL, ReleaseDate TEXT, ArtistId INTEGER NOT NULL, FOREIGN KEY(ArtistId) REFERENCES Artists(ArtistId) );
これで、データベースに次のテーブルができました。
sqlite> .tables Albums Albums1 Artists
データを挿入
次に、古いテーブルのデータを挿入します。
INSERT
を使用する 古いテーブルからデータを選択し、それを新しいテーブルに挿入するステートメント。このように:
INSERT INTO Albums (AlbumId, AlbumName, ReleaseDate, ArtistId) SELECT AlbumId, AlbumName, Year, ArtistId FROM Albums1;
データが新しいテーブルに挿入されたことを確認します:
sqlite> SELECT * FROM Albums; AlbumId AlbumName ReleaseDate ArtistId -------- ------------------------------- ----------- ---------- 1 Killers 1981 7 2 Powerslave 1984 7 3 Surfing with the Alien 1987 1 4 Heavy as a Really Heavy Thing 1995 11 5 Yummy Yummy 1994 17 6 Out of the Loop 2007 6 7 Suck on This 1989 13 8 Pork Soda 1993 13 9 Sailing the Seas of Cheese 1991 13 10 Flying in a Blue Dream 1989 1 11 Black Swans and Wormhole Wizard 2010 1 12 Somewhere in Time 1986 7 13 Big Red Car 1995 17
古いテーブルを削除する
新しいテーブルが作成され、データが入力されたので、古いテーブルを削除するか、変更するか、そのままにするかを選択できます。
とりあえずそのままにしておきましょう。後で削除します。
列を削除
列を削除するには、SELECT
からテーブルを作成できます 声明。 SELECT
で ステートメント、削除する列を省略します— SQLiteは、SELECT
に含まれる列のみを作成します ステートメント。
CREATE TABLE Albums2 AS SELECT AlbumId, AlbumName, ArtistId FROM Albums1;
次に、データが新しいテーブルに正常に挿入されたことを確認します。
sqlite> select * from Albums2; AlbumId AlbumName ArtistId -------- ------------------------------- ---------- 1 Killers 7 2 Powerslave 7 3 Surfing with the Alien 1 4 Heavy as a Really Heavy Thing 11 5 Yummy Yummy 17 6 Out of the Loop 6 7 Suck on This 13 8 Pork Soda 13 9 Sailing the Seas of Cheese 13 10 Flying in a Blue Dream 1 11 Black Swans and Wormhole Wizard 1 12 Somewhere in Time 7 13 Big Red Car 17
これで、データベースに次のテーブルができました。
sqlite> .tables Albums Albums1 Albums2 Artists