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 TABLEpouze 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
UNIQUEneboPRIMARY KEYomezení. - Pokud má nový sloupec hodnotu
NOT NULLomezení, musíte zadat výchozí hodnotu pro sloupec jinou nežNULLhodnotu. - Výchozí hodnota nového sloupce nemůže být
CURRENT_TIMESTAMP,CURRENT_DATEaCURRENT_TIMEnebo 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','john.doe@example.com','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 TABLEpříkaz k úpravě struktury existující tabulky. - Použijte
ALTER TABLE table_name RENAME TO new_namepříkaz k přejmenování tabulky. - Použijte
ALTER TABLE table_name ADD COLUMN column_definitionpříkaz k přidání sloupce do tabulky. - Použijte
ALTER TABLE table_name RENAME COLUMN current_name TO new_namepřejmenovat sloupec.