[SQL] 모든 테이블 명령을 드롭
SQL모든 테이블 명령을 드롭
SQLite는 모든 테이블을 삭제하는 명령은 무엇입니까?
마찬가지로 나는 모든 인덱스를 삭제하고 싶습니다.
해결법
-
==============================
1.나는 당신이 1 안타에있는 모든 테이블을 삭제할 수 있다고 생각하지 않습니다하지만 당신은 명령을 얻기 위해 다음을 수행 할 수 있습니다 :
나는 당신이 1 안타에있는 모든 테이블을 삭제할 수 있다고 생각하지 않습니다하지만 당신은 명령을 얻기 위해 다음을 수행 할 수 있습니다 :
select 'drop table ' || name || ';' from sqlite_master where type = 'table';
이것의 출력은 당신을 위해 테이블을 삭제하는 스크립트입니다. 인덱스의 경우, 단지 인덱스 테이블을 교체합니다.
당신은 테이블이나 인덱스가 선택 제한 할 수있는 곳 섹션에서 다른 절을 사용할 수 있습니다 (예 : "이름의 글로브 'pax_ *'" "pax_"로 시작하는 사람들을 위해).
당신은 실행 한 명령 만 거기 때문에 간단한 bash는 (또는 cmd.exe를) 스크립트에서의 실행으로이 스크립트의 생성을 결합 할 수 있습니다.
아마 빠른 - 당신은 DB에서 정보의 상관하지 않는 경우, 당신이 단지는 하드 디스크 오프에 저장된 파일을 삭제할 수 있다고 생각합니다. 나는이 시험 적이지만 작동하지 않을 이유는 볼 수 없습니다.
-
==============================
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.
rm db/development.sqlite3
-
==============================
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.난 당신이 또한 리셋 자동 증가 시퀀스에 sqlite_sequence에서 삭제를 실행할 수있는 테이블을 삭제 아니라 파일을 삭제 관련된 다른 답변에 추가하고 싶습니다.
난 당신이 또한 리셋 자동 증가 시퀀스에 sqlite_sequence에서 삭제를 실행할 수있는 테이블을 삭제 아니라 파일을 삭제 관련된 다른 답변에 추가하고 싶습니다.
-
==============================
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.모든 테이블을 감소했습니다 (테이블이 갈 때 인덱스가 사라집니다) 일단 다음 내가 아는까지로 SQLite 데이터베이스에 남아 아무것도 파일이 난 그냥 한 빠른 테스트에서 (축소하지 않는 것 같습니다 있지만,이 없다 ).
모든 테이블을 감소했습니다 (테이블이 갈 때 인덱스가 사라집니다) 일단 다음 내가 아는까지로 SQLite 데이터베이스에 남아 아무것도 파일이 난 그냥 한 빠른 테스트에서 (축소하지 않는 것 같습니다 있지만,이 없다 ).
파일을 삭제하면 가장 빠른 것 같다 그래서 - 앱 시도는 DB 파일에 액세스 할 때 그냥 다시해야한다.
-
==============================
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.나는이 가장 방탄 또는 휴대용 솔루션으로 말할 수는 없지만, 내 테스트 스크립트를 작동 :
나는이 가장 방탄 또는 휴대용 솔루션으로 말할 수는 없지만, 내 테스트 스크립트를 작동 :
.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.A는 명명 된 임시 파일없이, 단지 두 줄, 쉘 프롬프트에서 또는 $ DB를 가정하면 SQLite 데이터베이스의 이름입니다 :
A는 명명 된 임시 파일없이, 단지 두 줄, 쉘 프롬프트에서 또는 $ DB를 가정하면 SQLite 데이터베이스의 이름입니다 :
echo "SELECT 'DROP TABLE ' || name ||';' FROM sqlite_master WHERE type = 'table';" | sqlite3 -readonly "$db" | sqlite3 "$db"
from https://stackoverflow.com/questions/525512/drop-all-tables-command by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 데이터베이스 트랜잭션이 경쟁 조건을 방지합니까? (0) | 2020.04.30 |
---|---|
[SQL] 3 백만 행 PostgreSQL 데이터베이스에 느린 간단한 업데이트 쿼리 (0) | 2020.04.30 |
[SQL] 프로젝션 및 선택은 무엇인가? (0) | 2020.04.30 |
[SQL] 어떻게 현재 연도의 처음과 마지막 날짜를 얻으려면? (0) | 2020.04.30 |
[SQL] SQL 쿼리 내에서 두 개의 필드를 SUM하는 방법 (0) | 2020.04.30 |