meta données pour cette page
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| admin:testbase:test001 [2026/01/23 09:19] – nicolas | admin:testbase:test001 [2026/01/23 09:55] (Version actuelle) – [Correctif] nicolas | ||
|---|---|---|---|
| Ligne 9: | Ligne 9: | ||
| * Multiples accès concurrents : Bien que SQLite gère le verrouillage, | * Multiples accès concurrents : Bien que SQLite gère le verrouillage, | ||
| - | La commande **PRAGMA integrity_check** va parcourir toutes les tables et index de la base, vérifier les relations internes, les contraintes et s’assurer que les pages du fichier de base de données sont cohérentes. Elle renvoie « ok » si tout est correct, ou signale des erreurs précises en cas de corruption. | + | La commande **PRAGMA integrity_check** va parcourir toutes les tables et index de la base, vérifier les relations internes, les contraintes et s’assurer que les pages du fichier de base de données sont cohérentes. Elle renvoie « ok » si tout est correct, ou signale des erreurs précises en cas de corruption.\\ |
| Dans de nombreux cas, les erreurs détectées par PRAGMA integrity_check sont liées à des index corrompus plutôt qu’aux données elles-mêmes. SQLite fournit alors une solution simple : la commande REINDEX. En réindexant la base de données (ou des index spécifiques), | Dans de nombreux cas, les erreurs détectées par PRAGMA integrity_check sont liées à des index corrompus plutôt qu’aux données elles-mêmes. SQLite fournit alors une solution simple : la commande REINDEX. En réindexant la base de données (ou des index spécifiques), | ||
| ===== Correctif ===== | ===== Correctif ===== | ||
| - | Ainsi, le processus classique | + | Si une erreur de ce type est détectée, le correctif proposé est de réindexer la base grâce à la commande SQLite **REINDEX**\\ |
| - | Exécuter PRAGMA integrity_check pour identifier les éventuelles anomalies. | + | **Si l' |
| - | Si des problèmes d’index sont détectés, exécuter | + | |
| - | Refaire un PRAGMA integrity_check pour confirmer que la base est désormais cohérente. | + | |
| Cette approche permet de maintenir la fiabilité d’une base SQLite, même lorsqu’elle a été soumise à des conditions d’utilisation difficiles, tout en limitant le risque de perte de données. | Cette approche permet de maintenir la fiabilité d’une base SQLite, même lorsqu’elle a été soumise à des conditions d’utilisation difficiles, tout en limitant le risque de perte de données. | ||
| + | ===== Qu’est-ce qu’un index dans une base de données ? ===== | ||
| + | |||
| + | Un index est une structure spéciale qui améliore la rapidité des recherches et des tris dans une table. | ||
| + | On peut le comparer à l’index à la fin d’un livre : au lieu de parcourir toutes les pages pour trouver un mot, on regarde directement dans l’index pour savoir où aller. | ||
| + | |||
| + | ===== Dans une base SQLite ===== | ||
| + | |||
| + | * Chaque table peut avoir zéro ou plusieurs index. | ||
| + | * Un index est créé sur une ou plusieurs colonnes, par exemple `Nom` ou `Email`. | ||
| + | * Il stocke les valeurs de ces colonnes dans un ordre particulier, | ||
| + | * Lorsqu’une requête fait une recherche ou un tri sur ces colonnes, SQLite peut utiliser l’index pour accéder rapidement aux données, sans lire toute la table. | ||
| + | |||
| + | ===== Qu’est-ce que REINDEX ? ===== | ||
| + | |||
| + | La commande **REINDEX** permet de reconstruire les index d’une base SQLite. | ||
| + | Les index peuvent parfois se corrompre à cause : | ||
| + | * d’arrêts imprévus ou de plantages, | ||
| + | * de problèmes matériels (disque ou mémoire), | ||
| + | * ou de modifications structurelles de la base (migration, scripts). | ||
| + | |||
| + | **REINDEX** recrée les index à partir des données réelles, ce qui répare la plupart des incohérences détectées par `PRAGMA integrity_check`, | ||
| + | |||
| + | ===== Syntaxe de base ===== | ||
| + | |||
| + | * Réindexer toute la base : | ||
| + | ````sql | ||
| + | REINDEX; | ||
| + | ```` | ||
| + | * Réindexer une table spécifique (tous ses index) : | ||
| + | ````sql | ||
| + | REINDEX nom_table; | ||
| + | ```` | ||
| + | * Réindexer un index précis : | ||
| + | ````sql | ||
| + | REINDEX nom_index; | ||
| + | ```` | ||
| + | |||
| + | ===== Exemple concret ===== | ||
| + | |||
| + | Supposons que nous avons une table `Clients` : | ||
| + | |||
| + | ````sql | ||
| + | CREATE TABLE Clients ( | ||
| + | ID INTEGER PRIMARY KEY, | ||
| + | Nom TEXT, | ||
| + | Email TEXT | ||
| + | ); | ||
| + | |||
| + | CREATE INDEX idx_clients_nom ON Clients(Nom); | ||
| + | |||