Sammanfattning :i den här handledningen kommer du att lära dig hur du använder SQLite ALTER TABLE
för att ändra strukturen för en befintlig tabell.
Till skillnad från SQL-standard och andra databassystem, stöder SQLite en mycket begränsad funktionalitet i ALTER TABLE
uttalande.
Genom att använda en SQLite ALTER TABLE
kan du utföra två åtgärder:
- Byt namn på en tabell.
- Lägg till en ny kolumn i en tabell.
- Byt namn på en kolumn (läggs till som stöds i version 3.20.0)
Använda SQLite ALTER TABLE för att byta namn på en tabell
För att byta namn på en tabell använder du följande ALTER TABLE RENAME TO
uttalande:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Det här är viktiga punkter du bör känna till innan du byter namn på en tabell:
ALTER TABLE
byter bara namn på en tabell i en databas. Du kan inte använda den för att flytta tabellen mellan de bifogade databaserna.- Databasobjekten som index och utlösare som är associerade med tabellen kommer att associeras med den nya tabellen.
- Om en tabell refereras av vyer eller uttalanden i utlösare måste du manuellt ändra definitionen av vyer och utlösare.
Låt oss ta ett exempel på att byta namn på en tabell.
Skapa först en tabell med namnet devices
som har tre kolumner:name,
model
, serial
; och infoga en ny rad i devices
bord.
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)
Prova det
För det andra, använd ALTER TABLE RENAME TO
uttalande för att ändra devices
tabell till equipment
tabell enligt följande:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Prova det
För det tredje, fråga efter data från equipment
tabell för att verifiera RENAME
operation.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Prova det
Använda SQLite ALTER TABLE för att lägga till en ny kolumn i en tabell
Du kan använda SQLite ALTER TABLE
för att lägga till en ny kolumn i en befintlig tabell. I det här scenariot lägger SQLite till den nya kolumnen i slutet av den befintliga kolumnlistan.
Följande illustrerar syntaxen för ALTER TABLE ADD COLUMN
uttalande:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Det finns vissa begränsningar för den nya kolumnen:
- Den nya kolumnen kan inte ha en
UNIQUE
ellerPRIMARY KEY
begränsning. - Om den nya kolumnen har en
NOT NULL
begränsning måste du ange ett annat standardvärde för kolumnen än enNULL
värde. - Den nya kolumnen kan inte ha en standard på
CURRENT_TIMESTAMP
,CURRENT_DATE
ochCURRENT_TIME
, eller ett uttryck. - Om den nya kolumnen är en främmande nyckel och kontroll av främmande nyckel är aktiverad, måste den nya kolumnen acceptera ett standardvärde
NULL
.
Du kan till exempel lägga till en ny kolumn med namnet location
till equipment
tabell:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Prova det
Använda SQLite ALTER TABLE för att byta namn på en kolumn
SQLite lade till stöd för att byta namn på en kolumn med ALTER TABLE RENAME COLUMN
uttalande i version 3.20.0
Följande visar syntaxen för ALTER TABLE RENAME COLUMN
uttalande:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
För mer information om hur du byter namn på en kolumn, kolla in självstudien för att byta namn på en kolumn.
Använda SQLite ALTER TABLE för andra åtgärder
Om du vill utföra andra åtgärder, t.ex. släppa en kolumn, använder du följande steg:
Följande skript illustrerar stegen ovan:
-- 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
exempel
SQLite stöder inte ALTER TABLE DROP COLUMN
påstående. För att ta bort en kolumn måste du använda stegen ovan.
Följande skript skapar två tabeller users
och favorites
, och infoga data i dessa tabeller:
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)
Följande sats returnerar data från users
tabell:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Och följande påstående returnerar data från favorites
tabell:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Anta att du vill ta bort kolumnen phone
av users
bord.
Inaktivera först kontroll av främmande nyckel:
PRAGMA foreign_keys=off;
För det andra, starta en ny transaktion:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
För det tredje, skapa en ny tabell som innehåller data för users
tabellen förutom phone
kolumn:
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)
För det fjärde, kopiera data från users
till persons
tabell:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
För det femte, släpp users
tabell:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
För det sjätte, byt namn på persons
tabell till users
tabell:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
För det sjunde, genomför transaktionen:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
För det åttonde, aktivera kontroll av främmande nyckel:
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Här är users
tabell efter att ha tappat phone
kolumn:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Sammanfattning
- Använd
ALTER TABLE
uttalande för att ändra strukturen för en befintlig tabell. - Använd
ALTER TABLE table_name RENAME TO new_name
uttalande för att byta namn på en tabell. - Använd
ALTER TABLE table_name ADD COLUMN column_definition
uttalande för att lägga till en kolumn i en tabell. - Använd
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
för att byta namn på en kolumn.