Zusammenfassung :In diesem Tutorial lernen Sie, wie Sie SQLite ALTER TABLE
verwenden Anweisung zum Ändern der Struktur einer vorhandenen Tabelle.
Im Gegensatz zu SQL-Standard- und anderen Datenbanksystemen unterstützt SQLite eine sehr eingeschränkte Funktionalität von ALTER TABLE
Erklärung.
Durch die Verwendung eines SQLite ALTER TABLE
-Anweisung können Sie zwei Aktionen ausführen:
- Tabelle umbenennen.
- Eine neue Spalte zu einer Tabelle hinzufügen.
- Spalte umbenennen (unterstützt in Version 3.20.0 hinzugefügt)
Mit SQLite ALTER TABLE eine Tabelle umbenennen
Um eine Tabelle umzubenennen, verwenden Sie den folgenden ALTER TABLE RENAME TO
Aussage:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Dies sind wichtige Punkte, die Sie wissen sollten, bevor Sie eine Tabelle umbenennen:
- Die
ALTER TABLE
benennt nur eine Tabelle innerhalb einer Datenbank um. Sie können es nicht verwenden, um die Tabelle zwischen den angehängten Datenbanken zu verschieben. - Die mit der Tabelle verknüpften Datenbankobjekte wie Indizes und Trigger werden mit der neuen Tabelle verknüpft.
- Wenn eine Tabelle von Ansichten oder Anweisungen in Triggern referenziert wird, müssen Sie die Definition von Ansichten und Triggern manuell ändern.
Nehmen wir ein Beispiel für das Umbenennen einer Tabelle.
Erstellen Sie zunächst eine Tabelle mit dem Namen devices
das hat drei Spalten:name,
model
, serial
; und fügen Sie eine neue Zeile in die devices
ein Tabelle.
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)
Probieren Sie es aus
Verwenden Sie zweitens den ALTER TABLE RENAME TO
-Anweisung, um die devices
zu ändern Tabelle zu equipment
Tabelle wie folgt:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Drittens, Daten von equipment
abfragen Tabelle, um den RENAME
zu überprüfen Betrieb.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Mit SQLite ALTER TABLE eine neue Spalte zu einer Tabelle hinzufügen
Sie können die SQLite ALTER TABLE
verwenden -Anweisung, um einer vorhandenen Tabelle eine neue Spalte hinzuzufügen. In diesem Szenario hängt SQLite die neue Spalte am Ende der vorhandenen Spaltenliste an.
Das Folgende veranschaulicht die Syntax von ALTER TABLE ADD COLUMN
Aussage:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Es gibt einige Einschränkungen für die neue Spalte:
- Die neue Spalte darf keinen
UNIQUE
haben oderPRIMARY KEY
Einschränkung. - Wenn die neue Spalte einen
NOT NULL
hat Einschränkung müssen Sie für die Spalte einen anderen Standardwert alsNULL
angeben Wert. - Die neue Spalte darf nicht den Standardwert
CURRENT_TIMESTAMP
haben ,CURRENT_DATE
undCURRENT_TIME
, oder ein Ausdruck. - Wenn die neue Spalte ein Fremdschlüssel ist und die Fremdschlüssel-Einschränkungsprüfung aktiviert ist, muss die neue Spalte einen Standardwert
NULL
akzeptieren .
Sie können beispielsweise eine neue Spalte mit dem Namen location
hinzufügen zum equipment
Tabelle:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Probieren Sie es aus
Mit SQLite ALTER TABLE eine Spalte umbenennen
SQLite hat die Unterstützung für das Umbenennen einer Spalte mit ALTER TABLE RENAME COLUMN
hinzugefügt -Anweisung in Version 3.20.0
Das Folgende zeigt die Syntax von ALTER TABLE RENAME COLUMN
Aussage:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
Weitere Informationen zum Umbenennen einer Spalte finden Sie im Tutorial zum Umbenennen von Spalten.
Verwenden von SQLite ALTER TABLE für andere Aktionen
Wenn Sie andere Aktionen ausführen möchten, z. B. eine Spalte löschen, verwenden Sie die folgenden Schritte:
Das folgende Skript veranschaulicht die obigen Schritte:
-- 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
Beispiel
SQLite unterstützt ALTER TABLE DROP COLUMN
nicht Erklärung. Um eine Spalte zu löschen, müssen Sie die obigen Schritte ausführen.
Das folgende Skript erstellt zwei Tabellen users
und favorites
, und fügen Sie Daten in diese Tabellen ein:
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)
Die folgende Anweisung gibt Daten von den users
zurück Tabelle:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Und die folgende Anweisung gibt die Daten aus den favorites
zurück Tabelle:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Angenommen, Sie möchten die Spalte phone
löschen der users
Tabelle.
Deaktivieren Sie zunächst die Fremdschlüssel-Einschränkungsprüfung:
PRAGMA foreign_keys=off;
Starten Sie zweitens eine neue Transaktion:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
Erstellen Sie drittens eine neue Tabelle, um die Daten der users
zu speichern außer dem phone
Spalte:
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)
Viertens, kopieren Sie Daten von den users
an persons
Tabelle:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
Fünftens, löschen Sie die users
Tabelle:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
Als sechstes benennen Sie die persons
um Tabelle an users
Tabelle:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
Siebtens, übergeben Sie die Transaktion:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
Achtens, aktivieren Sie die Fremdschlüssel-Einschränkungsprüfung:
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Hier sind die users
Tisch, nachdem Sie das phone
fallen gelassen haben Spalte:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Zusammenfassung
- Verwenden Sie
ALTER TABLE
-Anweisung, um die Struktur einer vorhandenen Tabelle zu ändern. - Verwenden Sie
ALTER TABLE table_name RENAME TO new_name
Anweisung zum Umbenennen einer Tabelle. - Verwenden Sie
ALTER TABLE table_name ADD COLUMN column_definition
-Anweisung, um einer Tabelle eine Spalte hinzuzufügen. - Verwenden Sie
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
um eine Spalte umzubenennen.