Samenvatting :in deze tutorial leer je hoe je SQLite ALTER TABLE
gebruikt statement om de structuur van een bestaande tabel te wijzigen.
In tegenstelling tot SQL-standaard en andere databasesystemen, ondersteunt SQLite een zeer beperkte functionaliteit van de ALTER TABLE
verklaring.
Door een SQLite ALTER TABLE
. te gebruiken statement, kunt u twee acties uitvoeren:
- De naam van een tabel wijzigen.
- Voeg een nieuwe kolom toe aan een tabel.
- De naam van een kolom wijzigen (toegevoegd ondersteund in versie 3.20.0)
SQLite ALTER TABLE gebruiken om een tabel te hernoemen
Om een tabel te hernoemen, gebruik je de volgende ALTER TABLE RENAME TO
verklaring:
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Dit zijn belangrijke punten die u moet weten voordat u de naam van een tabel wijzigt:
- De
ALTER TABLE
hernoemt alleen een tabel binnen een database. U kunt het niet gebruiken om de tabel tussen de bijgevoegde databases te verplaatsen. - De database-objecten zoals indexen en triggers die aan de tabel zijn gekoppeld, worden aan de nieuwe tabel gekoppeld.
- Als naar een tabel wordt verwezen door views of instructies in triggers, moet u de definitie van views en triggers handmatig wijzigen.
Laten we een voorbeeld nemen van het hernoemen van een tabel.
Maak eerst een tabel met de naam devices
die drie kolommen heeft:name,
model
, serial
; en voeg een nieuwe rij toe aan de devices
tafel.
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)
Probeer het
Ten tweede, gebruik de ALTER TABLE RENAME TO
statement om de devices
. te wijzigen tafel naar equipment
tabel als volgt:
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Probeer het
Ten derde, gegevens opvragen van de equipment
tabel om de RENAME
. te verifiëren bediening.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Probeer het
SQLite ALTER TABLE gebruiken om een nieuwe kolom aan een tabel toe te voegen
U kunt de SQLite ALTER TABLE
. gebruiken statement om een nieuwe kolom aan een bestaande tabel toe te voegen. In dit scenario voegt SQLite de nieuwe kolom toe aan het einde van de bestaande kolomlijst.
Het volgende illustreert de syntaxis van ALTER TABLE ADD COLUMN
verklaring:
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Er zijn enkele beperkingen voor de nieuwe kolom:
- De nieuwe kolom mag geen
UNIQUE
. hebben ofPRIMARY KEY
beperking. - Als de nieuwe kolom een
NOT NULL
heeft beperking, moet u een andere standaardwaarde voor de kolom opgeven dan eenNULL
waarde. - De nieuwe kolom mag geen standaard
CURRENT_TIMESTAMP
. hebben ,CURRENT_DATE
, enCURRENT_TIME
, of een uitdrukking. - Als de nieuwe kolom een externe sleutel is en de beperkingscontrole van de externe sleutel is ingeschakeld, moet de nieuwe kolom een standaardwaarde accepteren
NULL
.
U kunt bijvoorbeeld een nieuwe kolom toevoegen met de naam location
naar de equipment
tafel:
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Probeer het
SQLite ALTER TABLE gebruiken om een kolom te hernoemen
SQLite heeft ondersteuning toegevoegd voor het hernoemen van een kolom met behulp van ALTER TABLE RENAME COLUMN
verklaring in versie 3.20.0
Het volgende toont de syntaxis van de ALTER TABLE RENAME COLUMN
verklaring:
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
Raadpleeg de tutorial over het hernoemen van kolommen voor meer informatie over het hernoemen van een kolom.
SQLite ALTER TABLE gebruiken voor andere acties
Als u andere acties wilt uitvoeren, bijvoorbeeld een kolom neerzetten, gebruikt u de volgende stappen:
Het volgende script illustreert de bovenstaande stappen:
-- 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
voorbeeld
SQLite biedt geen ondersteuning voor ALTER TABLE DROP COLUMN
uitspraak. Om een kolom neer te zetten, moet je de bovenstaande stappen volgen.
Het volgende script maakt twee tabellen users
en favorites
, en voeg gegevens in deze tabellen in:
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)
De volgende instructie retourneert gegevens van de users
tafel:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
En de volgende instructie retourneert de gegevens van de favorites
tafel:
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Stel dat u de kolom phone
. wilt laten vallen van de users
tafel.
Schakel eerst de beperkingscontrole van de refererende sleutel uit:
PRAGMA foreign_keys=off;
Ten tweede, start een nieuwe transactie:
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
Ten derde, maak een nieuwe tabel om de gegevens van de users
te bevatten tabel behalve de phone
kolom:
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)
Ten vierde, kopieer gegevens van de users
aan persons
tafel:
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
Ten vijfde, laat de users
vallen tafel:
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
Ten zesde, hernoem de persons
tabel aan users
tafel:
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
Ten zevende, voer de transactie uit:
COMMIT;
Code language: SQL (Structured Query Language) (sql)
Ten achtste, schakel de beperking van de externe sleutel in:
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Hier zijn de users
tafel na het laten vallen van de phone
kolom:
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Samenvatting
- Gebruik de
ALTER TABLE
statement om de structuur van een bestaande tabel te wijzigen. - Gebruik
ALTER TABLE table_name RENAME TO new_name
statement om de naam van een tabel te wijzigen. - Gebruik
ALTER TABLE table_name ADD COLUMN column_definition
statement om een kolom aan een tabel toe te voegen. - Gebruik
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
om een kolom te hernoemen.