복붙노트

[SQL] 모든 테이블 명령을 드롭

SQL

모든 테이블 명령을 드롭

SQLite는 모든 테이블을 삭제하는 명령은 무엇입니까?

마찬가지로 나는 모든 인덱스를 삭제하고 싶습니다.

해결법

  1. ==============================

    1.나는 당신이 1 안타에있는 모든 테이블을 삭제할 수 있다고 생각하지 않습니다하지만 당신은 명령을 얻기 위해 다음을 수행 할 수 있습니다 :

    나는 당신이 1 안타에있는 모든 테이블을 삭제할 수 있다고 생각하지 않습니다하지만 당신은 명령을 얻기 위해 다음을 수행 할 수 있습니다 :

    select 'drop table ' || name || ';' from sqlite_master
        where type = 'table';
    

    이것의 출력은 당신을 위해 테이블을 삭제하는 스크립트입니다. 인덱스의 경우, 단지 인덱스 테이블을 교체합니다.

    당신은 테이블이나 인덱스가 선택 제한 할 수있는 곳 섹션에서 다른 절을 사용할 수 있습니다 (예 : "이름의 글로브 'pax_ *'" "pax_"로 시작하는 사람들을 위해).

    당신은 실행 한 명령 만 거기 때문에 간단한 bash는 (또는 cmd.exe를) 스크립트에서의 실행으로이 스크립트의 생성을 결합 할 수 있습니다.

    아마 빠른 - 당신은 DB에서 정보의 상관하지 않는 경우, 당신이 단지는 하드 디스크 오프에 저장된 파일을 삭제할 수 있다고 생각합니다. 나는이 시험 적이지만 작동하지 않을 이유는 볼 수 없습니다.

  2. ==============================

    2.그것은이있는 것은 사실이지만 더 DROP ALL의 테이블은 다음 명령 세트를 사용하여 명령을하지 않습니다.

    그것은이있는 것은 사실이지만 더 DROP ALL의 테이블은 다음 명령 세트를 사용하여 명령을하지 않습니다.

    참고 :이 명령은 그래서 당신이 백업을 확인 손상된 데이터베이스에있는 잠재력을 가지고

    PRAGMA writable_schema = 1;
    delete from sqlite_master where type in ('table', 'index', 'trigger');
    PRAGMA writable_schema = 0;
    

    그런 다음에 삭제 된 공간을 복구 할

    VACUUM;
    

    있는지 모든 것을 만들 수있는 좋은 테스트는 괜찮습니다

    PRAGMA INTEGRITY_CHECK;
    
  3. ==============================

    3.

    rm db/development.sqlite3
    
  4. ==============================

    4.나는 SQLite는 안드로이드와 같은 문제가 있었다. 여기 내 솔루션입니다 :

    나는 SQLite는 안드로이드와 같은 문제가 있었다. 여기 내 솔루션입니다 :

    List<String> tables = new ArrayList<String>();
    Cursor cursor = db.rawQuery("SELECT * FROM sqlite_master WHERE type='table';", null);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        String tableName = cursor.getString(1);
        if (!tableName.equals("android_metadata") &&
                !tableName.equals("sqlite_sequence"))
            tables.add(tableName);
        cursor.moveToNext();
    }
    cursor.close();
    
    for(String tableName:tables) {
        db.execSQL("DROP TABLE IF EXISTS " + tableName);
    }
    
  5. ==============================

    5.난 당신이 또한 리셋 자동 증가 시퀀스에 sqlite_sequence에서 삭제를 실행할 수있는 테이블을 삭제 아니라 파일을 삭제 관련된 다른 답변에 추가하고 싶습니다.

    난 당신이 또한 리셋 자동 증가 시퀀스에 sqlite_sequence에서 삭제를 실행할 수있는 테이블을 삭제 아니라 파일을 삭제 관련된 다른 답변에 추가하고 싶습니다.

  6. ==============================

    6.pysqlite 사용 :

    pysqlite 사용 :

    tables = list(cur.execute("select name from sqlite_master where type is 'table'"))
    
    cur.executescript(';'.join(["drop table if exists %s" %i for i in tables]))
    
  7. ==============================

    7.모든 테이블을 감소했습니다 (테이블이 갈 때 인덱스가 사라집니다) 일단 다음 내가 아는까지로 SQLite 데이터베이스에 남아 아무것도 파일이 난 그냥 한 빠른 테스트에서 (축소하지 않는 것 같습니다 있지만,이 없다 ).

    모든 테이블을 감소했습니다 (테이블이 갈 때 인덱스가 사라집니다) 일단 다음 내가 아는까지로 SQLite 데이터베이스에 남아 아무것도 파일이 난 그냥 한 빠른 테스트에서 (축소하지 않는 것 같습니다 있지만,이 없다 ).

    파일을 삭제하면 가장 빠른 것 같다 그래서 - 앱 시도는 DB 파일에 액세스 할 때 그냥 다시해야한다.

  8. ==============================

    8.나는 안드로이드에서이 문제를했고 나는 서쪽과 같은 방법을 썼다.

    나는 안드로이드에서이 문제를했고 나는 서쪽과 같은 방법을 썼다.

    내 테이블에 AUTOINCREMENT 기본 키를 사용하기 때문에, sqlite_sequence라는 테이블이 있었다. 루틴이 그 테이블을 삭제하려고 할 때 SQLite는 충돌 것입니다. 나도 예외를 잡을 수 없었다. https://www.sqlite.org/fileformat.html#internal_schema_objects 보면, 나는 드롭하지 않았다 이러한 내부 스키마 테이블의 여러 가지가있을 수 있다는 것을 배웠습니다. 문서는 내가이 방법을 썼다 그래서 이러한 테이블 중 하나가 이름이 sqlite_로 시작하는 것을 말한다

    private void dropAllUserTables(SQLiteDatabase db) {
        Cursor cursor = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null);
        //noinspection TryFinallyCanBeTryWithResources not available with API < 19
        try {
            List<String> tables = new ArrayList<>(cursor.getCount());
    
            while (cursor.moveToNext()) {
                tables.add(cursor.getString(0));
            }
    
            for (String table : tables) {
                if (table.startsWith("sqlite_")) {
                    continue;
                }
                db.execSQL("DROP TABLE IF EXISTS " + table);
                Log.v(LOG_TAG, "Dropped table " + table);
            }
        } finally {
            cursor.close();
        }
    }
    
  9. ==============================

    9.나는이 가장 방탄 또는 휴대용 솔루션으로 말할 수는 없지만, 내 테스트 스크립트를 작동 :

    나는이 가장 방탄 또는 휴대용 솔루션으로 말할 수는 없지만, 내 테스트 스크립트를 작동 :

    .output /tmp/temp_drop_tables.sql
    select 'drop table ' || name || ';' from sqlite_master where type = 'table';
    .output stdout
    .read /tmp/temp_drop_tables.sql
    .system rm /tmp/temp_drop_tables.sql
    

    코드의이 비트는, 임시 파일로 출력을 리디렉션 내가 (임시 파일에 명령을 보내는) 표준 출력에, 세트 출력 다시 실행하고자하는 '드롭 테이블'명령을 구성, 다음 파일에서 명령을 실행, 그리고 마지막으로 파일을 제거합니다.

  10. ==============================

    10.A는 명명 된 임시 파일없이, 단지 두 줄, 쉘 프롬프트에서 또는 $ DB를 가정하면 SQLite 데이터베이스의 이름입니다 :

    A는 명명 된 임시 파일없이, 단지 두 줄, 쉘 프롬프트에서 또는 $ DB를 가정하면 SQLite 데이터베이스의 이름입니다 :

    echo "SELECT 'DROP TABLE ' || name ||';' FROM sqlite_master WHERE type = 'table';" |
        sqlite3 -readonly "$db" | sqlite3 "$db"
    
  11. from https://stackoverflow.com/questions/525512/drop-all-tables-command by cc-by-sa and MIT license