102 votes

ALTER COLUMN en sqlite

Comment puis-je modifier la colonne dans sqlite? C'est en Postgresql

 ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;
 

Je crois qu'il n'y a pas du tout ALTER COLUMN dans sqlite, seul ALTER TABLE est pris en charge.

Une idée? Merci!

137voto

Alexandre Jasmin Points 18067

Il n’ya pas d’ALTER COLUMN dans sqlite.

Je crois que votre seule option est de:

  • Renommez la table en un nom temporaire
  • Créer une nouvelle table sans la contrainte NOT NULL
  • Copier le contenu de l'ancien tableau dans le nouveau
  • Enlevez l'ancienne table

Cette autre réponse de Stackoverflow explique le processus en détail

68voto

Noah Points 7332

S'il est vrai que les est pas de MODIFIER la COLONNE, si vous ne voulez renommer la colonne de chute de la contrainte not NULL, ou de modifier le type de données, vous pouvez utiliser l'ensemble de dangereux commandes:

PRAGMA writable_schema = 1;
UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';
PRAGMA writable_schema = 0;

Vous devez fermer et rouvrir votre connexion, ou le vide de la base de données pour recharger les changements dans le schéma.

Par exemple:

Y:> sqlite3 booktest
SQLite version 3.7.4
Entrez ".aide" pour obtenir des instructions
Entrer des instructions SQL terminée avec un ";"
sqlite> créer une table de LIVRES ( titre, TEXTE qui n'a PAS la valeur NULL, publication_date TEXT not NULL);
sqlite> insert into LIVRES (VALEURS"NULLTEST",null);
Erreur: LIVRES.publication_date ne peut pas être NULL
sqlite> PRAGMA writable_schema = 1;
sqlite> mise à JOUR SQLITE_MASTER DÉFINIR SQL = 'CREATE TABLE des LIVRES ( titre, TEXTE qui n'a PAS la valeur NULL, publication_date TEXTE)' WHERE NOM = 'LIVRES';
sqlite> PRAGMA writable_schema = 0;
sqlite> .q

Y:> sqlite3 booktest
SQLite version 3.7.4
Entrez ".aide" pour obtenir des instructions
Entrer des instructions SQL terminée avec un ";"
sqlite> insert into LIVRES (VALEURS"NULLTEST",null);
sqlite> .q

LES RÉFÉRENCES SUIVENT:


pragma schema_version
Lorsque cette pragma est sur, le SQLITE_MASTER tables dans la base de données peut être modifié à l'aide d'ordinaire UPDATE, INSERT et DELETE. Avertissement: la mauvaise utilisation de cette pragma peut facilement entraîner la corruption dans le fichier de base de données.

[alter table](à Partir de http://www.sqlite.org/lang_altertable.html)
SQLite prend en charge un sous-ensemble limité de l'instruction ALTER TABLE. La commande ALTER TABLE dans SQLite permet à l'utilisateur de renommer une table ou pour ajouter une nouvelle colonne à une table existante. Il n'est pas possible de renommer une colonne, supprimer une colonne, ou d'ajouter ou de supprimer des contraintes à partir d'un tableau.

ALTER TABLE SYNTAX

34voto

Rajesh Points 502

SQLite prend en charge un sous-ensemble limité de l'instruction ALTER TABLE. La commande ALTER TABLE dans SQLite permet à l'utilisateur de renommer une table ou pour ajouter une nouvelle colonne à une table existante. Il n'est pas possible de renommer une colonne, supprimer une colonne, ou d'ajouter ou de supprimer des contraintes à partir d'un tableau. Mais vous pouvez modifier colonne de table type de données ou d'autres biens par les étapes suivantes.

  1. BEGIN TRANSACTION;
  2. CRÉER une TABLE TEMPORAIRE t1_backup(a,b);
  3. INSÉREZ DANS t1_backup SÉLECTIONNEZ a,b from t1;
  4. DROP TABLE t1;
  5. CREATE TABLE t1(a,b);
  6. INSERT INTO t1 SÉLECTIONNEZ a,b DE t1_backup;
  7. DROP TABLE t1_backup;
  8. S'ENGAGER

Pour plus de détails, vous pouvez consulter le lien.

4voto

Oli Points 65050

Aucune des autres réponses n’est inexacte, mais j’ai trouvé que le moyen le plus simple de gérer des ALTER complexes consiste à utiliser Sqliteman (FOSS).

Il gérera pour vous l'acte de jonglerie (comme décrit dans d'autres réponses).

Sélectionnez la table books_book, Par le menu: Contexte> Modifier la table: Décochez NULL> Modifier, terminé

Voir Sqliteman Doc: Alter Table

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X