Резюме :в този урок ще научите как да използвате SQLite ALTER TABLE
оператор за промяна на структурата на съществуваща таблица.
За разлика от стандартния SQL и други системи за бази данни, SQLite поддържа много ограничена функционалност на ALTER TABLE
изявление.
С помощта на SQLite ALTER TABLE
изявление, можете да извършите две действия:
- Преименувайте таблица.
- Добавете нова колона към таблица.
- Преименувайте колона (добавено, поддържано във версия 3.20.0)
Използване на SQLite ALTER TABLE за преименуване на таблица
За да преименувате таблица, използвате следния ALTER TABLE RENAME TO
изявление:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Това са важни точки, които трябва да знаете, преди да преименувате таблица:
ALTER TABLE
само преименува таблица в база данни. Не можете да го използвате за преместване на таблицата между прикачените бази данни.- Обектите на базата данни, като индекси и тригери, свързани с таблицата, ще бъдат свързани с новата таблица.
- Ако таблица се препраща от изгледи или изрази в тригери, трябва ръчно да промените дефиницията на изгледите и задействанията.
Да вземем пример за преименуване на таблица.
Първо създайте таблица с име devices
който има три колони:name,
model
, 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
изявление за промяна на devices
таблица към equipment
таблица, както следва:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Трето, потърсете данни от equipment
таблица, за да проверите RENAME
операция.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Използване на SQLite ALTER TABLE за добавяне на нова колона към таблица
Можете да използвате SQLite ALTER TABLE
изявление за добавяне на нова колона към съществуваща таблица. В този сценарий SQLite добавя новата колона в края на съществуващия списък с колони.
Следното илюстрира синтаксиса на ALTER TABLE ADD COLUMN
изявление:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Има някои ограничения за новата колона:
- Новата колона не може да има
UNIQUE
илиPRIMARY KEY
ограничение. - Ако новата колона има
NOT NULL
ограничение, трябва да посочите стойност по подразбиране за колоната, различна отNULL
стойност. - Новата колона не може да има по подразбиране
CURRENT_TIMESTAMP
,CURRENT_DATE
иCURRENT_TIME
, или израз. - Ако новата колона е външен ключ и проверката за ограничаване на външния ключ е активирана, новата колона трябва да приеме стойност по подразбиране
NULL
.
Например, можете да добавите нова колона с име location
към equipment
таблица:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Опитайте го
Използване на SQLite ALTER TABLE за преименуване на колона
SQLite добави поддръжката за преименуване на колона с помощта на ALTER TABLE RENAME COLUMN
изявление във версия 3.20.0
Следното показва синтаксиса на ALTER TABLE RENAME COLUMN
изявление:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
За повече информация как да преименувате колона, вижте урока за преименуване на колона.
Използване на SQLite ALTER TABLE за други действия
Ако искате да извършите други действия, например пускане на колона, използвайте следните стъпки:
Следният скрипт илюстрира стъпките по-горе:
-- 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 не поддържа ALTER TABLE DROP COLUMN
изявление. За да пуснете колона, трябва да използвате стъпките по-горе.
Следният скрипт създава две таблици 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)
И следното изявление връща данните от favorites
таблица:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Да предположим, че искате да премахнете колоната phone
на users
таблица.
Първо, деактивирайте проверката за ограничаване на външния ключ:
PRAGMA foreign_keys=off;
Второ, започнете нова транзакция:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
Трето, създайте нова таблица, която да съхранява данни на users
таблица с изключение на 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)
Четвърто, копирайте данни от users
до persons
таблица:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
Пето, махнете users
таблица:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
Шесто, преименувайте persons
таблица за users
таблица:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
Седмо, извършете транзакцията:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
Осмо, активирайте проверката за ограничение на външния ключ:
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
за преименуване на колона.