Oversigt :i denne øvelse lærer du, hvordan du bruger SQLite ALTER TABLE
sætning for at ændre strukturen af en eksisterende tabel.
I modsætning til SQL-standard og andre databasesystemer, understøtter SQLite en meget begrænset funktionalitet af ALTER TABLE
erklæring.
Ved at bruge en SQLite ALTER TABLE
sætning, kan du udføre to handlinger:
- Omdøb en tabel.
- Tilføj en ny kolonne til en tabel.
- Omdøb en kolonne (tilføjet understøttet i version 3.20.0)
Brug af SQLite ALTER TABLE til at omdøbe en tabel
For at omdøbe en tabel, bruger du følgende ALTER TABLE RENAME TO
erklæring:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Dette er vigtige punkter, du bør vide, før du omdøber en tabel:
ALTERTABEL omdøber kun en tabel i en database. Du kan ikke bruge den til at flytte tabellen mellem de vedhæftede databaser. - Databaseobjekterne, såsom indekser og triggere, der er knyttet til tabellen, vil blive knyttet til den nye tabel.
- Hvis en tabel refereres af visninger eller udsagn i triggere, skal du manuelt ændre definitionen af visninger og triggere.
Lad os tage et eksempel på at omdøbe en tabel.
Først skal du oprette en tabel med navnet enheder
der har tre kolonner:navn,
model
, seriel
; og indsæt en ny række i enhederne
tabel.
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)
Prøv det
For det andet skal du bruge ALTER TABLE RENAME TO
sætning for at ændre enhederne
tabel til udstyr
tabel som følger:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Prøv det
For det tredje, forespørg data fra udstyret
tabel for at bekræfte RENAME
operation.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Brug af SQLite ALTER TABLE til at tilføje en ny kolonne til en tabel
Du kan bruge SQLite ALTER TABLE
sætning for at tilføje en ny kolonne til en eksisterende tabel. I dette scenarie tilføjer SQLite den nye kolonne i slutningen af den eksisterende kolonneliste.
Det følgende illustrerer syntaksen for ALTER TABLE ADD COLUMN
erklæring:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Der er nogle begrænsninger for den nye kolonne:
- Den nye kolonne kan ikke have en
UNIQUE
ellerPRIMÆR NØGLE
begrænsning. - Hvis den nye kolonne har en
NOT NULL
begrænsning, skal du angive en anden standardværdi for kolonnen end enNULL
værdi. - Den nye kolonne kan ikke have en standard på
CURRENT_TIMESTAMP
,CURRENT_DATE
ogCURRENT_TIME
, eller et udtryk. - Hvis den nye kolonne er en fremmednøgle, og kontrollen med fremmednøglebegrænsning er aktiveret, skal den nye kolonne acceptere en standardværdi
NULL
.
For eksempel kan du tilføje en ny kolonne med navnet placering
til udstyret
tabel:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Prøv det
Brug af SQLite ALTER TABLE til at omdøbe en kolonne
SQLite tilføjede understøttelse af omdøbning af en kolonne ved hjælp af ALTER TABLE RENAME COLUMN
erklæring i version 3.20.0
Det følgende viser syntaksen for ALTER TABLE RENAME COLUMN
erklæring:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
For mere information om, hvordan du omdøber en kolonne, kan du se selvstudiet om omdøbning af kolonnen.
Brug af SQLite ALTER TABLE til andre handlinger
Hvis du vil udføre andre handlinger, f.eks. slippe en kolonne, skal du bruge følgende trin:
Følgende script illustrerer trinene ovenfor:
-- 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
eksempel
SQLite understøtter ikke ALTER TABLE DROP COLUMN
udmelding. For at slippe en kolonne skal du bruge trinene ovenfor.
Følgende script opretter to tabeller brugere
og favoritter
, og indsæt data i disse 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ølgende sætning returnerer data fra brugerne
tabel:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Og følgende sætning returnerer data fra favoritterne
tabel:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Antag, at du vil slette kolonnen telefon
af brugerne
tabel.
Først skal du deaktivere kontrol af fremmednøglebegrænsning:
PRAGMA foreign_keys=off;
For det andet, start en ny transaktion:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
For det tredje skal du oprette en ny tabel til at indeholde data fra brugerne
tabel med undtagelse af telefonen
kolonne:
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)
For det fjerde, kopier data fra brugerne
til personer
tabel:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
For det femte skal du slippe brugere
tabel:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
For det sjette, omdøb personerne
tabel til brugere
tabel:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
For det syvende, begå transaktionen:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
For det ottende, aktiver kontrollen af fremmednøglebegrænsning:
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Her er brugerne
tabel efter at have droppet telefonen
kolonne:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Oversigt
- Brug
ALTER TABLE
sætning for at ændre strukturen af en eksisterende tabel. - Brug
ALTER TABLE table_name RENAME TO new_name
sætning for at omdøbe en tabel. - Brug
ALTER TABLE table_name ADD COLUMN column_definition
sætning for at tilføje en kolonne til en tabel. - Brug
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
for at omdøbe en kolonne.