SQLite
 sql >> Base de données >  >> RDS >> SQLite

SQLite ALTER TABLE

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 :

  1. Renommer un tableau.
  2. Ajouter une nouvelle colonne à un tableau.
  3. 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 ou PRIMARY 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'un NULL valeur.
  • La nouvelle colonne ne peut pas avoir une valeur par défaut de CURRENT_TIMESTAMP , CURRENT_DATE , et CURRENT_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.