2010-01-23 5 views

Répondre

1

Je ne suis pas au courant que vous pouvez supprimer tous les index en une seule commande - OMI vous devez déposer chacun par son nom. Voir aussi: http://www.sqlite.org/lang_dropindex.html En outre, vérifier pour des informations supplémentaires: Drop all tables command

+0

J'ai besoin de supprimer des index de une table seulement, pas tous de la base de données. – Pentium10

14

Pour obtenir tous les noms d'index dans une base de données

SELECT name FROM sqlite_master WHERE type == 'index' 

Pour une table spécifique:

SELECT name FROM sqlite_master WHERE type == 'index' AND tbl_name == 'table Name' 

Ensuite, dans votre langue, répéter les résultats et les laisser tomber

FOR x IN RESULTSET 
    SQL = "DROP INDEX " & X 
0
#!/bin/bash 

DB=your_sqlite.db 
TABLE="some_table" 

INDEXES="$(echo "SELECT name FROM sqlite_master WHERE type == 'index' AND tbl_name = '$TABLE;" | sqlite3 $DB)" 
for i in $INDEXES; do 
    echo "DROP INDEX '$i';" | sqlite3 $DB 
done 

Assurez-vous qu'aucun autre processus accède à la base de données, alors que vous appelez ce script, ou si c'est pas possible d'ajouter

PRAGMA busy_timeout=20000; 

dans chaque echo que vous envoyez à la base de données

Questions connexes