sql >> Databasteknik >  >> RDS >> SQLite

SQLite ALTER TABELL

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:

  1. Byt namn på en tabell.
  2. Lägg till en ny kolumn i en tabell.
  3. 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 eller PRIMARY 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 en NULL värde.
  • Den nya kolumnen kan inte ha en standard på CURRENT_TIMESTAMP , CURRENT_DATE och CURRENT_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.

  1. Personsökning med Oracle

  2. OBJECTPROPERTY() vs OBJECTPROPERTYEX() i SQL Server:Vad är skillnaden?

  3. Syntaxfel i slutet av inmatning i PostgreSQL

  4. Hur man subtraherar timmar från ett Datetime-värde i MariaDB