SQLite : gare aux verrous
La gestion des verrous dans SQLite est d’une étrange bizarreté. Lorsque vous faites une opération DML ou DDL en écriture (UPDATE, DELETE, INSERT mais aussi CREATE, DROP, ALTER), vous posez un verrou sur la database, c’est-à-dire sur le fichier contenant l’ensemble des tables. Il n’y a donc plus aucune possibilité de modifier, de supprimer, d’insérer des données de manière concurrente sur les tables de la base.
Autrement dit, en cas de modification en masse des lignes d’une table d’une base (d’un fichier sqlite), vous devrez attendre la fin des opérations pour pouvoir procéder à des modifications sur cette table ou sur une autre table de la base au niveau d’un accès ou d’une opération concurrente. Ou bien, vous obtiendrez le message :
Error: database is locked
Remarquez qu’en mode MyISAM ou Aria 1.5, MySQL ou MariaDB posent également un verrou exclusif sur table. Seul, le choix du moteur InnoDB permet les accès concurrents en écriture.
Seule bonne nouvelle : les modifications n’empêchent pas aux autres utilisateurs de consulter – via des SELECT – le contenu des tables en cours de modification.