Modifier la colonne en sqlite

comment modifier la colonne en sqlite? C'est dans Postgresql

ALTER TABLE books_book ALTER COLUMN publication_date DROP NOT NULL;

je crois qu'il n'y a pas de colonne ALTER dans sqlite du tout, seule ALTER TABLE est supportée.

une idée? Merci!

60
demandé sur Colonel Thirty Two 2010-10-24 07:17:20

3 réponses

il n'y a pas de colonne ALTER dans sqlite.

je crois que votre seule option est de:

  • renommer la table en un nom temporaire
  • créer une nouvelle table sans la contrainte non nulle
  • copier le contenu de l'ancienne table à la nouvelle
  • Supprimer l'ancienne table

Ce autres Stackoverflow réponse , explique le processus en détail

91
répondu Alex Jasmin 2017-05-23 12:26:20

bien qu'il soit vrai que la colonne n'est pas ALTER, si vous voulez seulement renommer la colonne, Supprimer la contrainte NOT NULL, ou changer le type de données, vous pouvez utiliser l'ensemble suivant de commandes dangereuses:

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 aurez besoin de fermer et de rouvrir votre connexion ou d'aspirer la base de données pour recharger les changements dans le schéma.

par exemple:

Y:\> **sqlite3 booktest**  
SQLite version 3.7.4  
Enter ".help" for instructions  
Enter SQL statements terminated with a ";"  
sqlite> **create table BOOKS ( title TEXT NOT NULL, publication_date TEXT NOT 
NULL);**  
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**  
Error: BOOKS.publication_date may not be NULL  
sqlite> **PRAGMA writable_schema = 1;**  
sqlite> **UPDATE SQLITE_MASTER SET SQL = 'CREATE TABLE BOOKS ( title TEXT NOT 
NULL, publication_date TEXT)' WHERE NAME = 'BOOKS';**  
sqlite> **PRAGMA writable_schema = 0;**  
sqlite> **.q**  

Y:\> **sqlite3 booktest**  
SQLite version 3.7.4  
Enter ".help" for instructions  
Enter SQL statements terminated with a ";"  
sqlite> **insert into BOOKS VALUES ("NULLTEST",null);**  
sqlite> **.q**  

RÉFÉRENCES:


pragma writable_schema

Lorsque ce pragma est activé, les tables SQLITE_MASTER dans lesquelles la base de données peut être modifiée en utilisant des instructions de mise à jour, D'insertion et de suppression ordinaires. Attention: l'utilisation abusive de ce pragma peut facilement aboutir à un fichier de base de données corrompu.

[modifier la table] (de http://www.sqlite.org/lang_altertable.html )

SQLite supporte un sous-ensemble limité D'ALTER TABLE. La commande ALTER TABLE en SQLite permet à l'utilisateur de renommer une table ou d'ajouter une nouvelle colonne à une table existante. Il n'est pas possible de renommer une colonne, supprimer une colonne, ou ajouter ou supprimer des contraintes d'une table.

ALTER TABLE SYNTAX

58
répondu Noah 2018-04-08 20:11:33

SQLite supporte un sous-ensemble limité de ALTER TABLE. La commande ALTER TABLE en SQLite permet à l'utilisateur de renommer une table ou d'ajouter une nouvelle colonne à une table existante. Il n'est pas possible de renommer une colonne, supprimer une colonne, ou ajouter ou supprimer des contraintes d'une table. Mais vous pouvez modifier le type de données de colonne de table ou une autre propriété par les étapes suivantes.

  1. BEGIN TRANSACTION;
  2. créer la TABLE temporaire t1_backup (a,b);
  3. inscrire dans t1_backup sélectionner a, b de t1;
  4. DROP TABLE t1;
  5. créer tableau t1 (A, b);
  6. inscrire dans t1 sélectionner A, b à partir de t1_backup;
  7. DROP TABLE t1_backup;
  8. COMMIT

pour plus de détails, vous pouvez consulter le lien 1519220920".

28
répondu Rajesh 2012-10-11 11:32:41