SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite ALTER TABLE

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:

  1. Tabelle umbenennen.
  2. Eine neue Spalte zu einer Tabelle hinzufügen.
  3. 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 oder PRIMARY KEY Einschränkung.
  • Wenn die neue Spalte einen NOT NULL hat Einschränkung müssen Sie für die Spalte einen anderen Standardwert als NULL angeben Wert.
  • Die neue Spalte darf nicht den Standardwert CURRENT_TIMESTAMP haben , CURRENT_DATE und CURRENT_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.