2014-05-09 2 views
1

먼저, 일부 배경 정보, 누군가가 더 나은 방법을 제안 할 수 있습니다. SQLite 데이터베이스를 텍스트 파일로 내보내기해야합니다. C++을 사용해야하고 CppSQLite lib를 사용하기로 선택했습니다.일부 "특수"SQLite 테이블을 삭제하면 어떻게됩니까

내가 만드는 쿼리를 수집하고 모든 테이블 데이터를 내 보낸 후에 문제는 sqlite_sequencesqlite_statN과 같은 테이블이 있다는 것입니다. 가져 오는 동안 특수 목적이므로이 테이블을 만들 수 없습니다. 따라서이 테이블이 없어지면 안정성에 영향을 미칠까요?

질문의 또 다른 부분. 어떤 방법으로 내보내기 및 가져 오기 SQLite 데이터베이스 CppSQLite 또는 다른 SQLite lib C++ 사용하여 있습니까?

P. 이 특정 상황에서는 데이터베이스 파일을 복사하는 방법이 적절하지 않습니다.

답변

1

sqlite_으로 시작하는 개체 이름은 예약되어 있습니다. 원하는 경우에도 직접 만들 수는 없습니다. (그러나 그 중 일부의 내용을 변경하면 sqlite_stat * 테이블을 삭제할 수 있습니다.)

테이블은 AUTOINCREMENT 컬럼이있는 테이블이 작성 될 때 자동으로 작성됩니다. 테이블의 실제 순서 값에 대한 레코드가 먼저 필요할 때 만들어집니다. 시퀀스 값을 저장/복원하려면 이전 값을 다시 삽입해야합니다.

sqlite_stat * 테이블은 분석을 통해 생성됩니다. SQL 텍스트를 가져온 후 ANALYZE를 실행하는 것이 가장 쉽지만 느려질 수 있습니다. 더 빨리 분석 할 테이블 (예 : sqlite_master)에서 ANALYZE를 실행하여 빈 sqlite_stat * 테이블을 만든 다음 수동으로 이전 레코드를 삽입하십시오.

이 모든 (shell.c에 소스 코드) sqlite3 명령 줄 도구의 .dump 명령에 구현됩니다

SQLite version 3.8.4.3 2014-04-03 16:53:12 
Enter ".help" for usage hints. 
Connected to a transient in-memory database. 
Use ".open FILENAME" to reopen on a persistent database. 
sqlite> create table t(x integer primary key autoincrement); 
sqlite> insert into t default values; 
sqlite> insert into t default values; 
sqlite> analyze; 
sqlite> .dump 
PRAGMA foreign_keys=OFF; 
BEGIN TRANSACTION; 
CREATE TABLE t(x integer primary key autoincrement); 
INSERT INTO "t" VALUES(1); 
INSERT INTO "t" VALUES(2); 
ANALYZE sqlite_master; 
INSERT INTO "sqlite_stat1" VALUES('t',NULL,'2'); 
DELETE FROM sqlite_sequence; 
INSERT INTO "sqlite_sequence" VALUES('t',2); 
COMMIT; 
sqlite> 
+0

감사합니다! 하지만 삽입하기 전에 'ANALYZE'를 호출하는 질문 하나가 삽입 후이를 호출하는 것과 같은 결과를 줍니까 ??? – ST3

+0

무엇을 삽입 하시겠습니까? –

+0

이전 레코드 삽입. – ST3

관련 문제