2010-01-15 3 views
1

SQLite3 vous donne une clé primaire par défaut appelée rowid pour chaque table si vous ne spécifiez pas de clé primaire. Cependant, il semble qu'il y ait quelques inconvénients à compter sur ce point:SQLite3 et les rowid implicites

La commande VACUUM peut modifier les ROWIDs des entrées dans les tableaux qui ne disposent pas d'une PRIMARY KEY explicite ENTIER.

http://www.sqlite.org/lang_vacuum.html

Je veux modifier une base de données existante SQLite3 d'utiliser des clés primaires explicites plutôt que de implicites de rowid donc j'ai la possibilité d'exécuter le vide lorsque cela est nécessaire. Puis-je faire cela sans reconstruire toute la base de données?

+2

SQLite frappe à nouveau ... –

Répondre

1

Vous n'avez pas besoin de recréer toute la base de données. Toutefois, depuis SQLite ne supporte pas les instructions ALTER TABLE, vous devez:

  1. créer une table temporaire avec le schéma correct
  2. copie toutes les données de la table d'origine à la table temporaire
  3. supprimer la table d'origine
  4. renommez la table temporaire

Je vous suggère d'utiliser une application telle que SQLiteman pour le faire pour vous.

+0

SQLite prend définitivement en charge ALTER TABLE. – Bill

+2

@Bill: Vous avez raison, mais vous ne pouvez l'utiliser que pour ajouter des colonnes ou renommer la table. –

Questions connexes