Je veux supprimer ou ajouter une colonne dans la base de données sqlite
J'utilise la requête suivante pour supprimer la colonne.
ALTER TABLE TABLENAME DROP COLUMN COLUMNNAME
Mais cela donne une erreur
System.Data.SQLite.SQLiteException: SQLite error
near "DROP": syntax error
Réponses:
ALTER TABLE SQLite
Vous pouvez:
la source
PRAGMA foreign_keys=OFF
. Dans ce cas, après avoir effectué cette séquence, il faut appelerPRAGMA foreign_keys=ON
pour réactiver les clés étrangères.RENAME COLUMN
est prise en charge. 🎉 sqlite.org/releaselog/3_25_0.htmlJ'ai écrit une implémentation Java basée sur la méthode recommandée par Sqlite pour ce faire:
Pour obtenir la colonne du tableau, j'ai utilisé le "PRAGMA table_info":
En fait, j'ai écrit à ce sujet sur mon blog, vous pouvez y voir plus d'explications:
http://udinic.wordpress.com/2012/05/09/sqlite-drop-column-support/
la source
INSERT
déclaration, vous pouvez également créer la nouvelle table en faisant un"CREAT TABLE" + tableName + "AS SELECT " + columnsSeperated + " FROM " + tableName + "_old;"
Comme d'autres l'ont souligné
source: http://www.sqlite.org/lang_altertable.html
Bien que vous puissiez toujours créer un nouveau tableau, puis supprimer l'ancien. Je vais essayer d'expliquer cette solution de contournement avec un exemple.
Vous souhaitez maintenant supprimer la colonne
height
de ce tableau.Créez une autre table appelée
new_person
Copiez maintenant les données de l'ancienne table
Déposez maintenant la
person
table et renommez-lanew_person
enperson
Alors maintenant, si vous faites un
.schema
, vous verrezla source
CREATE TABLE new_person AS SELECT id, first_name, last_name, age FROM person;
http://www.sqlite.org/lang_altertable.html
Comme vous pouvez le voir dans le diagramme, seul ADD COLUMN est pris en charge. Il existe une solution de contournement (un peu lourde): http://www.sqlite.org/faq.html#q11
la source
Nous ne pouvons pas supprimer une colonne spécifique dans SQLite 3. Voir la FAQ .
la source
Comme d'autres l'ont souligné, la
ALTER TABLE
déclaration de sqlite ne prend pas en chargeDROP COLUMN
, et la recette standard pour ce faire ne préserve pas les contraintes et les indices.Voici du code python pour le faire de manière générique, tout en conservant toutes les contraintes et index clés.
Veuillez sauvegarder votre base de données avant de l'utiliser! Cette fonction repose sur la falsification de l'instruction CREATE TABLE d'origine et est potentiellement un peu dangereuse - par exemple, elle fera la mauvaise chose si un identifiant contient une virgule ou une parenthèse incorporée.
Si quelqu'un souhaitait contribuer à une meilleure façon d'analyser le SQL, ce serait formidable!
MISE À JOUR J'ai trouvé une meilleure façon d'analyser en utilisant le
sqlparse
paquetopen-source. S'il y a un intérêt, je le posterai ici, laissez simplement un commentaire le demandant ...la source
J'ai réécrit la réponse @Udinic afin que le code génère automatiquement une requête de création de table . Il n'a pas non plus besoin
ConnectionSource
. Il doit également le faire dans une transaction .la source
DB Browser for SQLite vous permet d'ajouter ou de supprimer des colonnes.
Dans la vue principale, onglet Database Structure, cliquez sur le nom de la table. Un bouton Modify Tableest activé, ce qui ouvre une nouvelle fenêtre dans laquelle vous pouvez sélectionner la colonne / le champ et le supprimer.
la source
vous pouvez utiliser Sqlitebrowser. En mode navigateur, pour la base de données et la table respectives, sous la structure tab -database, en suivant l'option Modifier la table, la colonne respective peut être supprimée.
la source
J'ai amélioré la réponse user2638929 et maintenant elle peut conserver le type de colonne, la clé primaire, la valeur par défaut, etc.
PS. J'ai utilisé ici
android.arch.persistence.db.SupportSQLiteDatabase
, mais vous pouvez facilement le modifier pour l'utiliserandroid.database.sqlite.SQLiteDatabase
la source
Je suppose que ce que vous voulez faire, c'est la migration de la base de données. 'Drop'ping une colonne n'existe pas dans SQLite. Mais vous pouvez cependant ajouter une colonne supplémentaire à l'aide de la requête de table ALTER.
la source
Vous pouvez utiliser l'administrateur SQlite pour modifier les noms de colonne. Cliquez avec le bouton droit sur le nom de la table et sélectionnez Modifier la table. Vous trouverez ici la structure de la table et vous pouvez facilement la renommer.
la source
Comme SQLite a un support limité à ALTER TABLE, vous ne pouvez donc AJOUTER une colonne qu'à la fin de la table OU CHANGER TABLE_NAME dans SQLite.
Voici la meilleure réponse de COMMENT SUPPRIMER UNE COLONNE DE SQLITE?
visitez Supprimer la colonne de la table SQLite
la source
Comme alternative:
Si vous avez une table avec schéma
vous pouvez utiliser une
CREATE TABLE...AS
instruction commeCREATE TABLE person2 AS SELECT id, first_name, last_name, age FROM person;
, c'est-à-dire laisser de côté les colonnes dont vous ne voulez pas. Déposez ensuite laperson
table d' origine et renommez la nouvelle.Notez que cette méthode produit une table sans PRIMARY KEY et sans contraintes. Pour les conserver, utilisez les méthodes décrites par d'autres pour créer une nouvelle table ou utilisez une table temporaire comme intermédiaire.
la source
Cette réponse à une question différente vise à modifier une colonne, mais je pense qu'une partie de la réponse pourrait également fournir une approche utile si vous avez beaucoup de colonnes et que vous ne voulez pas retaper la plupart d'entre elles à la main pour votre instruction INSERT:
https://stackoverflow.com/a/10385666
Vous pouvez vider votre base de données comme décrit dans le lien ci-dessus, puis saisir l'instruction "create table" et un modèle "insert" à partir de ce vidage, puis suivre les instructions de l'entrée de FAQ SQLite "Comment ajouter ou supprimer des colonnes d'un existant table dans SQLite. " (La FAQ est liée ailleurs sur cette page.)
la source
Mise en œuvre sur la
Python
base d'informations sur http://www.sqlite.org/faq.html#q11 .Ce script crée d'abord une table temporaire aléatoire et insère les données des seules colonnes nécessaires, sauf celle qui sera supprimée. Restaure ensuite la table d'origine en fonction de la table temporaire et supprime la table temporaire.
la source
Ma solution, il suffit d'appeler cette méthode.
Et méthode auxiliaire pour obtenir les colonnes:
la source
et il suffit d'appeler une méthode
la source
Vous pouvez également utiliser maintenant le navigateur DB pour SQLite pour manipuler les colonnes
la source
exemple pour ajouter une colonne: -
ici, student est nom_table et TOB est nom_colonne à ajouter.
Il fonctionne et a été testé.
la source