概要 :このチュートリアルでは、SQLite ALTER TABLE
の使用方法を学習します 既存のテーブルの構造を変更するステートメント。
SQL標準や他のデータベースシステムとは異なり、SQLiteは ALTER TABLE
の非常に限定された機能をサポートします ステートメント。
SQLite ALTER TABLE
を使用する ステートメントでは、2つのアクションを実行できます:
- テーブルの名前を変更します。
- テーブルに新しい列を追加します。
- 列の名前を変更します(バージョン3.20.0でサポートされるように追加されました)
SQLiteALTERTABLEを使用してテーブルの名前を変更する
テーブルの名前を変更するには、次の ALTER TABLE RENAME TO
を使用します ステートメント:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
テーブルの名前を変更する前に知っておくべき重要なポイントは次のとおりです。
-
ALTER TABLE
データベース内のテーブルの名前を変更するだけです。これを使用して、接続されているデータベース間でテーブルを移動することはできません。 - テーブルに関連付けられているインデックスやトリガーなどのデータベースオブジェクトは、新しいテーブルに関連付けられます。
- トリガー内のビューまたはステートメントによってテーブルが参照されている場合は、ビューとトリガーの定義を手動で変更する必要があります。
テーブルの名前を変更する例を見てみましょう。
まず、 devices
という名前のテーブルを作成します name、
の3つの列があります モデルコード> 、
serial
; devices
に新しい行を挿入します テーブル。
CREATE TABLE devices (
name TEXT NOT NULL,
model TEXT NOT NULL,
Serial INTEGER NOT NULL UNIQUE
);
INSERT INTO devices (name, model, serial)
VALUES('HP ZBook 17 G3 Mobile Workstation','ZBook','SN-2015');
Code language: SQL (Structured Query Language) (sql)
試してみてください
次に、 ALTER TABLE RENAME TO
を使用します デバイス
を変更するステートメント 機器
へのテーブル 次のような表:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
試してみてください
第三に、機器
からデータをクエリします RENAME
を確認するためのテーブル 操作。
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
試してみてください
SQLiteALTERTABLEを使用して新しい列をテーブルに追加する
SQLiteのALTERTABLE
を使用できます 既存のテーブルに新しい列を追加するステートメント。このシナリオでは、SQLiteは既存の列リストの最後に新しい列を追加します。
次に、 ALTER TABLE ADD COLUMN
の構文を示します。 ステートメント:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
新しい列にはいくつかの制限があります:
- 新しい列に
UNIQUE
を含めることはできません またはPRIMARYKEY
制約。 - 新しい列に
NOTNULL
がある場合 制約がある場合は、NULL
以外の列のデフォルト値を指定する必要があります 値。 - 新しい列のデフォルトを
CURRENT_TIMESTAMP
にすることはできません 、CURRENT_DATE
、およびCURRENT_TIME
、または式。 - 新しい列が外部キーであり、外部キー制約チェックが有効になっている場合、新しい列はデフォルト値
NULL
を受け入れる必要があります 。
たとえば、 location
という名前の新しい列を追加できます 機器
に テーブル:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
試してみてください
SQLiteALTERTABLEを使用して列の名前を変更する
SQLiteは、 ALTER TABLE RENAME COLUMN
を使用して列の名前を変更するためのサポートを追加しました バージョン3.20.0のステートメント
次に、 ALTER TABLE RENAME COLUMN
の構文を示します。 ステートメント:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
列の名前を変更する方法の詳細については、列の名前変更のチュートリアルをご覧ください。
他のアクションにSQLiteALTERTABLEを使用する
列をドロップするなど、他のアクションを実行する場合は、次の手順を使用します。
次のスクリプトは、上記の手順を示しています。
-- disable foreign key constraint check
PRAGMA foreign_keys=off;
-- start a transaction
BEGIN TRANSACTION;
-- Here you can drop column
CREATE TABLE IF NOT EXISTS new_table(
column_definition,
...
);
-- copy data from the table to the new_table
INSERT INTO new_table(column_list)
SELECT column_list
FROM table;
-- drop the table
DROP TABLE table;
-- rename the new_table to the table
ALTER TABLE new_table RENAME TO table;
-- commit the transaction
COMMIT;
-- enable foreign key constraint check
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
SQLite ALTER TABLE DROP COLUMN
例
SQLiteはALTERTABLE DROP COLUMN
をサポートしていません 声明。列を削除するには、上記の手順を使用する必要があります。
次のスクリプトは、2つのテーブル users
を作成します およびfavorites
、およびこれらのテーブルにデータを挿入します:
CREATE TABLE users(
UserId INTEGER PRIMARY KEY,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL,
Email TEXT NOT NULL,
Phone TEXT NOT NULL
);
CREATE TABLE favorites(
UserId INTEGER,
PlaylistId INTEGER,
FOREIGN KEY(UserId) REFERENCES users(UserId),
FOREIGN KEY(PlaylistId) REFERENCES playlists(PlaylistId)
);
INSERT INTO users(FirstName, LastName, Email, Phone)
VALUES('John','Doe','[email protected]','408-234-3456');
INSERT INTO favorites(UserId, PlaylistId)
VALUES(1,1);
Code language: SQL (Structured Query Language) (sql)
次のステートメントは、 users
からデータを返します テーブル:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
そして、次のステートメントはお気に入り
からのデータを返します テーブル:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
phone
列を削除するとします。 ユーザー
の テーブル。
まず、外部キー制約チェックを無効にします。
PRAGMA foreign_keys=off;
次に、新しいトランザクションを開始します:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
3番目に、ユーザー
のデータを保持するための新しいテーブルを作成します phone
を除くテーブル 列:
CREATE TABLE IF NOT EXISTS persons (
UserId INTEGER PRIMARY KEY,
FirstName TEXT NOT NULL,
LastName TEXT NOT NULL,
Email TEXT NOT NULL
);
Code language: SQL (Structured Query Language) (sql)
第4に、 users
からデータをコピーします 人
へ テーブル:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
5番目に、 users
を削除します テーブル:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
6番目に、 people
の名前を変更します ユーザー
へのテーブル テーブル:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
第7に、トランザクションをコミットします:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
8番目に、外部キー制約チェックを有効にします。
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
これがusers
です phone
を削除した後のテーブル 列:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
概要
-
ALTER TABLE
を使用します 既存のテーブルの構造を変更するステートメント。 -
ALTER TABLE table_name RENAME TO new_name
を使用します テーブルの名前を変更するステートメント。 -
ALTER TABLE table_name ADD COLUMN column_definition
を使用します テーブルに列を追加するステートメント。 -
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
を使用します 列の名前を変更します。