J'ai un problème: je dois supprimer une colonne de ma base de données SQLite. J'ai écrit cette requête
alter table table_name drop column column_name
mais ça ne marche pas. Aidez-moi, s'il vous plaît.
De: http://www.sqlite.org/faq.html :
(11) Comment ajouter ou supprimer des colonnes d'une table existante dans SQLite.
SQLite a une prise en charge limitée d'ALTER TABLE que vous pouvez utiliser pour ajouter une colonne à la fin d'une table ou pour modifier le nom d'une table. Si vous souhaitez apporter des modifications plus complexes à la structure d'un tableau, vous devrez recréer le tableau. Vous pouvez enregistrer les données existantes dans une table temporaire, supprimer l'ancienne table, créer la nouvelle table, puis recopier les données à partir de la table temporaire.
Par exemple, supposons que vous ayez une table nommée «t1» avec les noms de colonnes «a», «b» et «c» et que vous souhaitiez supprimer la colonne «c» de cette table. Les étapes suivantes illustrent comment cela pourrait être fait:
BEGIN TRANSACTION; CREATE TEMPORARY TABLE t1_backup(a,b); INSERT INTO t1_backup SELECT a,b FROM t1; DROP TABLE t1; CREATE TABLE t1(a,b); INSERT INTO t1 SELECT a,b FROM t1_backup; DROP TABLE t1_backup; COMMIT;
TEMPORARY
deCREATE TABLE
.Au lieu de supprimer la table de sauvegarde, renommez-la simplement ...
la source
t1
.Pour plus de simplicité, pourquoi ne pas créer la table de sauvegarde à partir de l'instruction select?
la source
TEXT
.Cette option ne fonctionne que si vous pouvez ouvrir la base de données dans un navigateur de base de données tel que DB Browser pour SQLite .
Dans DB Browser pour SQLite:
la source
=> Créez une nouvelle table directement avec la requête suivante:
=> Insérez maintenant les données dans table_name de existing_table avec la requête suivante:
=> Déposez maintenant la table_existante en suivant la requête:
la source
Pour SQLite3 c ++:
la source
J'ai créé une fonction Python dans laquelle vous entrez la table et la colonne à supprimer en tant qu'arguments:
Selon les informations sur les réponses de Duda et MeBigFatGuy, cela ne fonctionnera pas s'il y a une clé étrangère sur la table, mais cela peut être corrigé avec 2 lignes de code (en créant une nouvelle table et pas seulement en renommant la table temporaire)
la source
Au cas où quelqu'un aurait besoin d'une fonction PHP (presque) prête à l'emploi, ce qui suit est basé sur cette réponse :
Contrairement à d'autres réponses, le SQL utilisé dans cette approche semble préserver les types de données des colonnes, alors que quelque chose comme la réponse acceptée semble aboutir à ce que toutes les colonnes soient de type
TEXT
.Mise à jour 1:
Le SQL utilisé présente l'inconvénient que les
autoincrement
colonnes ne sont pas conservées.la source
Juste au cas où ça pourrait aider quelqu'un comme moi.
Sur la base du site officiel et de la réponse acceptée , j'ai créé un code en utilisant C # qui utilise System.Data.SQLite package NuGet .
Ce code préserve également la clé primaire et la clé étrangère .
CODE en C #:
la source
Pour plus d'informations: https://www.techonthenet.com/sqlite/tables/alter_table.php
la source