Shrnutí :v tomto tutoriálu se naučíte používat SQLite ALTER TABLE
příkaz ke změně struktury existující tabulky.
Na rozdíl od standardu SQL a jiných databázových systémů podporuje SQLite velmi omezenou funkčnost ALTER TABLE
prohlášení.
Pomocí SQLite ALTER TABLE
můžete provést dvě akce:
- Přejmenujte tabulku.
- Přidejte do tabulky nový sloupec.
- Přejmenujte sloupec (podporováno ve verzi 3.20.0)
Použití SQLite ALTER TABLE k přejmenování tabulky
Chcete-li přejmenovat tabulku, použijte následující ALTER TABLE RENAME TO
prohlášení:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Toto jsou důležité body, které byste měli vědět, než tabulku přejmenujete:
ALTER TABLE
pouze přejmenuje tabulku v databázi. Nemůžete jej použít k přesunutí tabulky mezi připojenými databázemi.- Databázové objekty, jako jsou indexy a spouštěče přidružené k tabulce, budou přidruženy k nové tabulce.
- Pokud na tabulku odkazují pohledy nebo příkazy ve spouštěčích, musíte ručně změnit definici pohledů a spouštěčů.
Vezměme si příklad přejmenování tabulky.
Nejprve vytvořte tabulku s názvem devices
který má tři sloupce:name,
model
, serial
; a vložte nový řádek do devices
tabulka.
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)
Zkuste to
Za druhé, použijte ALTER TABLE RENAME TO
příkaz ke změně devices
stůl na equipment
tabulka takto:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Za třetí, dotazujte se na data z devices
tabulku pro ověření RENAME
operace.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Použití SQLite ALTER TABLE k přidání nového sloupce do tabulky
Můžete použít SQLite ALTER TABLE
příkaz přidat nový sloupec do existující tabulky. V tomto scénáři SQLite připojí nový sloupec na konec existujícího seznamu sloupců.
Následující text ilustruje syntaxi ALTER TABLE ADD COLUMN
prohlášení:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Pro nový sloupec platí určitá omezení:
- Nový sloupec nemůže mít
UNIQUE
neboPRIMARY KEY
omezení. - Pokud má nový sloupec hodnotu
NOT NULL
omezení, musíte zadat výchozí hodnotu pro sloupec jinou nežNULL
hodnotu. - Výchozí hodnota nového sloupce nemůže být
CURRENT_TIMESTAMP
,CURRENT_DATE
aCURRENT_TIME
nebo výraz. - Pokud je novým sloupcem cizí klíč a je povolena kontrola omezení cizího klíče, musí nový sloupec přijímat výchozí hodnotu
NULL
.
Můžete například přidat nový sloupec s názvem location
do devices
tabulka:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Zkuste to
Použití SQLite ALTER TABLE k přejmenování sloupce
SQLite přidalo podporu pro přejmenování sloupce pomocí ALTER TABLE RENAME COLUMN
prohlášení ve verzi 3.20.0
Následující text ukazuje syntaxi ALTER TABLE RENAME COLUMN
prohlášení:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
Další informace o tom, jak přejmenovat sloupec, najdete v kurzu přejmenování sloupce.
Použití SQLite ALTER TABLE pro další akce
Pokud chcete provést další akce, např. vypustit sloupec, použijte následující kroky:
Následující skript ilustruje výše uvedené kroky:
-- 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
příklad
SQLite nepodporuje ALTER TABLE DROP COLUMN
prohlášení. Chcete-li sloupec vypustit, musíte použít výše uvedené kroky.
Následující skript vytvoří dvě tabulky users
a favorites
a vložte data do těchto tabulek:
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)
Následující příkaz vrací data od users
tabulka:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
A následující příkaz vrátí data z favorites
tabulka:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Předpokládejme, že chcete odstranit sloupec phone
users
tabulka.
Nejprve vypněte kontrolu omezení cizího klíče:
PRAGMA foreign_keys=off;
Zadruhé zahajte novou transakci:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
Za třetí, vytvořte novou tabulku, která bude obsahovat data users
tabulka kromě phone
sloupec:
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)
Za čtvrté, zkopírujte data od users
persons
tabulka:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
Za páté, vypusťte users
tabulka:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
Za šesté, přejmenujte persons
tabulky users
tabulka:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
Za sedmé, potvrďte transakci:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
Za osmé, povolte kontrolu omezení cizího klíče:
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Zde jsou users
tabulky po upuštění phone
sloupec:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Shrnutí
- Použijte
ALTER TABLE
příkaz k úpravě struktury existující tabulky. - Použijte
ALTER TABLE table_name RENAME TO new_name
příkaz k přejmenování tabulky. - Použijte
ALTER TABLE table_name ADD COLUMN column_definition
příkaz k přidání sloupce do tabulky. - Použijte
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
přejmenovat sloupec.