297 votes

Comment renommer une colonne dans une table de base de données SQLite ?

J'aurais besoin de renommer des colonnes de quelques tables dans une base de données SQLite. Je sais qu'une question similaire a été posée sur stackoverflow auparavant, mais c'était pour SQL en général, et le cas de SQLite n'a pas été mentionné.

À partir de l'SQLite documentation de l'instruction ALTER TABLE, je crois qu'il n'est pas possible de faire une telle chose "facilement" (c'est à dire une seule instruction ALTER TABLE).

Je me demandais à quelqu'un connaissait un générique SQL façon de faire une telle chose avec SQLite.

451voto

Evan Points 9261

Disons que vous avez une table et ont besoin de renommer "colb ne" "col_b":

Tout d'abord vous renommez l'ancien tableau:

ALTER TABLE orig_table_name RENAME TO tmp_table_name;

Puis créer la nouvelle table, basé sur la vieille table, mais avec la mise à jour du nom de la colonne:

CREATE TABLE orig_table_name (
  col_a INT
, col_b INT
);

Puis copiez le contenu à travers de la table d'origine.

INSERT INTO orig_table_name(col_a, col_b)
SELECT col_a, colb
FROM tmp_table_name;

Enfin, la chute de l'ancien tableau.

DROP TABLE tmp_table_name;

Enveloppant le tout dans un BEGIN TRANSACTION; et COMMIT; est probablement une bonne idée.

57voto

Joce Points 3720
<p>Creuser autour, j’ai trouvé ce multiplateforme (Linux | Mac | Outil graphique Windows) appelé <a href="http://sqlitebrowser.sourceforge.net/">SQLite Database Browser</a> (comment unsexy !) qui permet en fait de renommer des colonnes dans un très convivial façon !</p> <p>Modifier | Modifier Table | Sélectionnez Table | Modifier le champ. Clic clic ! Tour est joué !</p> <p>Toutefois, si quelqu'un veut partager une façon programmatique de faire cela, je serais heureux de savoir !</p>

53voto

Noah Points 7332

S'il est vrai qu'il n'y 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 les commandes suivantes:

Remarque: Ces commandes peuvent corrompre votre base de données, alors assurez-vous d'avoir une sauvegarde

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  
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**  

**REFERENCES FOLLOW:**
<hr>

[pragma schema_version](http://www.sqlite.org/pragma.html#pragma_schema_version)  
When this pragma is on, the SQLITE_MASTER tables in which database can be changed using ordinary UPDATE, INSERT, and DELETE statements. Warning: misuse of this pragma can easily result in a corrupt database file.

[alter table](From http://www.sqlite.org/lang_altertable.html)  
SQLite supports a limited subset of ALTER TABLE. The ALTER TABLE command in SQLite allows the user to rename a table or to add a new column to an existing table. It is not possible to rename a column, remove a column, or add or remove constraints from a table. 

![ALTER TABLE SYNTAX][1]

18voto

aizquier Points 158
<p>Récemment, j’ai eu à faire à SQLite3 avec une table nommée <strong>points</strong> avec le colunms <strong>id, lon, lat</strong>. Erroneusly, lorsque le tableau est importé, les valeurs de la latitude où stockées dans la colonne de <strong>lon</strong> et vice-versa, donc une solution évidente serait de renommer les colonnes. Le truc était donc :<pre><code></code></pre><p>J’espère que cela serait utile pour vous !</p></p>

14voto

Elazar Leibovich Points 9396

Citant le sqlite documentation:

SQLite prend en charge un sous-ensemble limité de ALTER TABLE. La commande ALTER TABLE dans SQLite permet à l'utilisateur de renommer un table ou pour ajouter une nouvelle colonne à la 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.

Ce que vous pouvez faire est, bien sûr, créer une nouvelle table avec la nouvelle mise en page, SELECT * FROM old_table, et remplissez la table avec les valeurs que vous recevrez.

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