SQLite 테이블이있는 경우 자르시겠습니까?
SQLite에서 테이블을 자르려면 다음 구문을 사용해야합니다.
DELETE FROM someTable
그러나 테이블이있는 경우에만 테이블을 어떻게자를 수 있습니까?
불행히도 이것은 오류를 발생시킵니다.
DELETE FROM someTable IF EXISTS
이것은 작동하지 않습니다.
DELETE IF EXISTS FROM someTable
감사.
IMHO, 테이블을 삭제하고 다시 만드는 것이 더 효율적입니다. 그리고 예,이 경우 "IF EXISTS"를 사용할 수 있습니다.
2 단계 프로세스입니다.
다음을 사용하여 해당 테이블에서 모든 데이터를 삭제합니다.
Delete from TableName
그때:
DELETE FROM SQLITE_SEQUENCE WHERE name='TableName';
그냥하세요 delete
. 이것은 SQLite 문서에서 가져온 것입니다.
"DELETE 문에서 WHERE가 생략되고 삭제되는 테이블에 트리거가없는 경우 SQLite는 최적화를 사용하여 테이블의 각 행을 개별적으로 방문하지 않고도 전체 테이블 내용을 삭제합니다.이"잘라 내기 "최적화로 인해 삭제가 많이 실행됩니다. SQLite 버전 3.6.5 이전에는 자르기 최적화가 sqlite3_changes () 및 sqlite3_total_changes () 인터페이스와 count_changes pragma가 실제로 삭제 된 행 수를 반환하지 않음을 의미했습니다.이 문제는 버전 3.6.5부터 수정되었습니다. . "
나는 그것을 함께 일했다.
SQLiteDatabase db= this.getWritableDatabase();
db.delete(TABLE_NAME, null, null);
SELECT name FROM sqlite_master where name = '<TABLE_NAME_HERE>'
테이블 이름이 없으면 레코드가 반환되지 않습니다!
당신은 또한 사용할 수 있습니다
SELECT count(name) FROM sqlite_master where name = '<TABLE_NAME_HERE>'
개수가 1이면 테이블이 있음을 의미하고, 그렇지 않으면 0을 반환합니다.
삭제 후 VACUUM
명령 도 사용하고 있습니다. 따라서 전체 TRUNCATE
등가물을 위해 다음 코드를 사용합니다.
DELETE FROM <table>;
UPDATE SQLITE_SEQUENCE SET seq = 0 WHERE name = '<table>';
VACUUM;
자동 증분 재설정을 위해 삭제가 작동하지 않습니다.
DELETE FROM "sqlite_sequence" WHERE "name"='<table>';
VACUUM에 대한 자세한 내용은 https://blogs.gnome.org/jnelson/2015/01/06/sqlite-vacuum-and-auto_vacuum/ 에서 확인할 수 있습니다.
불행히도 SQLite에는 "TRUNCATE TABLE"명령이 없지만 SQLite의 DELETE
명령을 사용하여 기존 테이블에서 전체 데이터를 삭제할 수 있지만 명령을 사용 DROP TABLE
하여 전체 테이블을 삭제하고 한 번 다시 생성하는 것이 좋습니다. 다시.
"sqllite"는 mysql과 같은 "TRUNCATE"순서가 없습니다. 그러면 다른 방법을 찾아야합니다.이 함수 (reset_table)는 먼저 테이블의 모든 데이터를 삭제 한 다음 테이블의 AUTOINCREMENT 키를 재설정합니다 .... 이제 다음 작업을 수행 할 수 있습니다. 이 기능을 원하는 곳에서 사용하십시오 ...
예 :
private SQLiteDatabase mydb;
private final String dbPath = "data/data/your_project_name/databases/";
private final String dbName = "your_db_name";
public void reset_table(String table_name){
open_db();
mydb.execSQL("Delete from "+table_name);
mydb.execSQL("DELETE FROM SQLITE_SEQUENCE WHERE name='"+table_name+"';");
close_db();
}
public void open_db(){
mydb = SQLiteDatabase.openDatabase(dbPath + dbName + ".db", null, SQLiteDatabase.OPEN_READWRITE);
}
public void close_db(){
mydb.close();
}
참조 URL : https://stackoverflow.com/questions/4280041/truncate-a-sqlite-table-if-it-exists
'code' 카테고리의 다른 글
TabLayout 탭 스타일 (0) | 2021.01.05 |
---|---|
Ionic 2에서 사용자 지정 아이콘 추가 (0) | 2021.01.05 |
표시 할 텍스트를 기준으로 UILabel 자동 크기 조정 (0) | 2021.01.05 |
레코드를 파기 할 때 Carrierwave가 파일을 삭제하도록하는 방법은 무엇입니까? (0) | 2021.01.05 |
TextView의 텍스트 색상을 얻는 방법은 무엇입니까? (0) | 2021.01.05 |