Résumé :dans ce tutoriel, vous apprendrez à utiliser SQLite ALTER TABLE
instruction pour modifier la structure d'une table existante.
Contrairement au standard SQL et à d'autres systèmes de base de données, SQLite prend en charge une fonctionnalité très limitée de ALTER TABLE
déclaration.
En utilisant un SQLite ALTER TABLE
déclaration, vous pouvez effectuer deux actions :
- Renommer un tableau.
- Ajouter une nouvelle colonne à un tableau.
- Renommer une colonne (ajouté pris en charge dans la version 3.20.0)
Utiliser SQLite ALTER TABLE pour renommer une table
Pour renommer une table, vous utilisez la commande suivante ALTER TABLE RENAME TO
déclaration :
ALTER TABLE existing_table
RENAME TO new_table;
Code language: SQL (Structured Query Language) (sql)
Voici des points importants que vous devez connaître avant de renommer une table :
- La
ALTER TABLE
renomme uniquement une table dans une base de données. Vous ne pouvez pas l'utiliser pour déplacer la table entre les bases de données attachées. - Les objets de base de données tels que les index et les déclencheurs associés à la table seront associés à la nouvelle table.
- Si une table est référencée par des vues ou des instructions dans des déclencheurs, vous devez modifier manuellement la définition des vues et des déclencheurs.
Prenons un exemple pour renommer une table.
Tout d'abord, créez une table nommée devices
qui comporte trois colonnes :name,
model
, serial
; et insérez une nouvelle ligne dans les devices
tableau.
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)
Essayez-le
Deuxièmement, utilisez le ALTER TABLE RENAME TO
déclaration pour changer les devices
tableau vers equipment
tableau comme suit :
ALTER TABLE devices
RENAME TO equipment;
Code language: SQL (Structured Query Language) (sql)
Essayez-le
Troisièmement, interrogez les données de l'equipment
table pour vérifier le RENAME
opération.
SELECT
name,
model,
serial
FROM
equipment;
Code language: SQL (Structured Query Language) (sql)
Essayez-le
Utiliser SQLite ALTER TABLE pour ajouter une nouvelle colonne à une table
Vous pouvez utiliser SQLite ALTER TABLE
instruction pour ajouter une nouvelle colonne à une table existante. Dans ce scénario, SQLite ajoute la nouvelle colonne à la fin de la liste de colonnes existante.
Ce qui suit illustre la syntaxe de ALTER TABLE ADD COLUMN
déclaration :
ALTER TABLE table_name
ADD COLUMN column_definition;
Code language: SQL (Structured Query Language) (sql)
Certaines restrictions s'appliquent à la nouvelle colonne :
- La nouvelle colonne ne peut pas avoir un
UNIQUE
ouPRIMARY KEY
contrainte. - Si la nouvelle colonne a un
NOT NULL
contrainte, vous devez spécifier une valeur par défaut pour la colonne autre qu'unNULL
valeur. - La nouvelle colonne ne peut pas avoir une valeur par défaut de
CURRENT_TIMESTAMP
,CURRENT_DATE
, etCURRENT_TIME
, ou une expression. - Si la nouvelle colonne est une clé étrangère et que la vérification des contraintes de clé étrangère est activée, la nouvelle colonne doit accepter une valeur par défaut
NULL
.
Par exemple, vous pouvez ajouter une nouvelle colonne nommée location
au equipment
tableau :
ALTER TABLE equipment
ADD COLUMN location text;
Code language: SQL (Structured Query Language) (sql)
Essayez-le
Utiliser SQLite ALTER TABLE pour renommer une colonne
SQLite a ajouté le support pour renommer une colonne en utilisant ALTER TABLE RENAME COLUMN
déclaration dans la version 3.20.0
Ce qui suit montre la syntaxe de la ALTER TABLE RENAME COLUMN
déclaration :
ALTER TABLE table_name
RENAME COLUMN current_name TO new_name;
Pour plus d'informations sur la façon de renommer une colonne, consultez le tutoriel de renommage de colonne.
Utiliser SQLite ALTER TABLE pour d'autres actions
Si vous souhaitez effectuer d'autres actions, par exemple supprimer une colonne, procédez comme suit :
Le script suivant illustre les étapes ci-dessus :
-- 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
exemple
SQLite ne prend pas en charge ALTER TABLE DROP COLUMN
déclaration. Pour supprimer une colonne, vous devez suivre les étapes ci-dessus.
Le script suivant crée deux tables users
et favorites
, et insérez des données dans ces tables :
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)
L'instruction suivante renvoie les données des users
tableau :
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Et l'instruction suivante renvoie les données des favorites
tableau :
SELECT * FROM favorites;
Code language: SQL (Structured Query Language) (sql)
Supposons que vous souhaitiez supprimer la colonne phone
des users
tableau.
Tout d'abord, désactivez la vérification des contraintes de clé étrangère :
PRAGMA foreign_keys=off;
Deuxièmement, démarrez une nouvelle transaction :
BEGIN TRANSACTION;
Code language: SQL (Structured Query Language) (sql)
Troisièmement, créez une nouvelle table pour contenir les données des users
table sauf pour le phone
colonne :
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)
Quatrièmement, copiez les données des users
à persons
tableau :
INSERT INTO persons(UserId, FirstName, LastName, Email)
SELECT UserId, FirstName, LastName, Email
FROM users;
Code language: SQL (Structured Query Language) (sql)
Cinquièmement, supprimez les users
tableau :
DROP TABLE users;
Code language: SQL (Structured Query Language) (sql)
Sixièmement, renommez les persons
tableau aux users
tableau :
ALTER TABLE persons RENAME TO users;
Code language: SQL (Structured Query Language) (sql)
Septièmement, validez la transaction :
COMMIT;
Code language: SQL (Structured Query Language) (sql)
Huitièmement, activez la vérification des contraintes de clé étrangère :
PRAGMA foreign_keys=on;
Code language: SQL (Structured Query Language) (sql)
Voici les users
table après avoir déposé le phone
colonne :
SELECT * FROM users;
Code language: SQL (Structured Query Language) (sql)
Résumé
- Utilisez
ALTER TABLE
pour modifier la structure d'une table existante. - Utilisez
ALTER TABLE table_name RENAME TO new_name
instruction pour renommer une table. - Utilisez
ALTER TABLE table_name ADD COLUMN column_definition
instruction pour ajouter une colonne à une table. - Utilisez
ALTER TABLE table_name RENAME COLUMN current_name TO new_name
pour renommer une colonne.