SQLite는 독립형, 임베디드, 트랜잭션, 서버리스 및 제로 구성 SQL 데이터베이스 엔진을 구현하는 오픈 소스, 다중 플랫폼, 무료 및 소형 C 라이브러리입니다. 그것은 세계에서 가장 많이 사용되는 SQL 데이터베이스 엔진입니다.
기능 요약
주요 기능에는 분리 된 원자 단위, 내구성있는 일관된 트랜잭션 지원, SQL92 구현, 데이터베이스 파일을 컴퓨터간에 자유롭게 공유 할 수 있으며 최대 2TB의 데이터베이스 지원, 기가 바이트 크기의 문자열 및 문자열 지원, 작은 코드 풋 프린트 사용하기 쉽고 매우 간단한 API (Application Programming Interface)입니다.
또한 SQLite는 초기 구성이나 추가 관리가 필요하지 않으므로 개발자는 응용 프로그램 파일 형식을 사용하기에 적합하고 외부 종속성이 없으며 내장 데이터베이스가 포함 된 단일 플랫폼 디스크 파일에 전체 데이터베이스를 저장할 수 있습니다. TCL (Tool Command Language) 바인딩 및 포괄적 인 문서로 제공됩니다.
수많은 다른 프로그래밍 언어에 대한 바인딩을 별도로 사용할 수 있습니다. 이 소스 코드는 잘 설명되어 있으며 SQLite 데이터베이스 관리에 사용되는 오프셋에서 설계된 독립 실행 형 CLI (명령 줄 인터페이스) 클라이언트와 함께 제공됩니다.
무엇을 위해 사용할 수 있습니까?
SQLite 데이터베이스 엔진은 개인용 또는 상업용으로 사용할 수 있습니다. SQLite에 대한 권장 용도로는 가젯 용 데이터베이스, 웹 사이트 데이터베이스, 엔터프라이즈 RDBMS (관계형 데이터베이스 관리 시스템)의 스탠드 인 및 애플리케이션 파일 형식이 있습니다.
후드 및 지원 OS
SQLite 배포판은 SQLite 데이터베이스를 관리하는 데 사용할 수있는 독립 실행 형 명령 줄 액세스 프로그램 (sqlite)과 함께 제공되며 SQLite 라이브러리를 사용하는 방법의 예입니다. 그것은 전적으로 ANSI-C 프로그래밍 언어로 작성되었습니다.
지원되는 데스크톱 운영 체제에는 GNU / Linux, Mac OS X 및 Microsoft Windows가 포함됩니다. 지원되는 모바일 운영체제에는 Android 및 iOS가 포함됩니다. 이 제품은 32 비트 및 64 비트 하드웨어 플랫폼에서 성공적으로 테스트되었으며 다른 OS와 쉽게 호환됩니다.
이 릴리스의 새로운 기능 :
이 릴리스의 주요 내용은 PostgreSQL 스타일의 UPSERT에 대한 지원과 특히 ORDER BY LIMIT 쿼리에 대한 향상된 성능을 포함합니다.
버전의 새로운 기능 :
가능한 경우 F2FS 파일 시스템의 원자 쓰기 기능을 활용하여 트랜잭션 오버 헤드를 크게 줄입니다. 현재 SQLITE_ENABLE_BATCH_ATOMIC_WRITE 컴파일 시간 옵션이 필요합니다.
ATTACH 및 DETACH 명령이 트랜잭션 내부에서 작동하도록 허용합니다.
PRIMARY KEY에 정확히 하나의 열이 포함되어 있으면 WITHOUT ROWID 가상 테이블에 쓸 수 있습니다.
"fsync ()" WAL 재설정에서 헤더를 쓴 후에 발생하는 오류는 이제 체크 포인트에 대한 동기화 설정을 사용합니다. 이것은 "fullfsync"를 사용한다는 것을 의미합니다. PRAGMA checkpoint_fullfsync가 설정된 경우 Mac에서.
sqlite3_sourceid () 함수는 소스 코드가 버전 제어로 체크인 된 것으로부터 수정되었는지 감지하고 수정 사항이있는 경우 버전 해시의 마지막 네 문자를 "alt1"로 표시합니다. 또는 "alt2"이다. 목적은 의도하지 않은 부주의 한 편집을 감지하는 것입니다. 위조범이이 기능을 파괴 할 수 있습니다.
오른쪽에 집계 쿼리가있는 CREATE TABLE AS 문에 대한 열 이름의 de-quoting이 개선되었습니다.
더 적은 "stat ()" 유닉스 VFS에 의해 발행 된 시스템 호출.
ESCAPE 절과 함께 작동하도록 LIKE 최적화를 향상 시켰습니다.
이제 쿼리 플래너는 쿼리 평면 최적화를 사용하는 대신 공동 루틴을 사용하여 FROM 절 하위 쿼리를 구현하는 것을 선호합니다. 하위 쿼리에 대한 공동 루틴 사용에 대한 지원은 더 이상 비활성화 할 수 없습니다.
! =, IS, IS NOT, NOT NULL 및 IS NULL 제약 조건에 대한 정보를 가상 테이블의 xBestIndex 메서드에 전달합니다.
최종 개행 문자가 누락 된 경우 입력의 마지막 행을 허용하도록 CSV 가상 테이블을 향상 시켰습니다.
거의 사용되지 않는 & quot; 스크래치 & quot; 메모리 할당 자. 가능한 경우 대량의 메모리 할당을 피해야한다는 힌트를 SQLite_CONFIG_SMALL_MALLOC 구성 설정으로 바꿉니다.
군집 가상 테이블을 기존 공용 가상 테이블 확장에 추가했습니다.
데이터베이스 파일의 페이지에 대한 직접 액세스를 제공하는 sqlite_dbpage 가상 테이블을 추가했습니다. 소스 코드는 병합에 내장되어 있으며 컴파일 타임 옵션 인 -DSQLITE_ENABLE_DBPAGE_VTAB을 사용하여 활성화됩니다.새로운 유형의 fts5vocab 가상 테이블을 추가하십시오 - & quot; 인스턴스 & quot; - 가능한 한 가장 낮은 수준에서 FTS5 전체 텍스트 인덱스에 대한 직접 액세스를 제공합니다.
일부 구형 랩톱에서는 Firefox에서 문제가 발생했기 때문에 Windows VFS에서 rand_s ()에 대한 호출을 제거합니다.
명령 줄 셸에 대한 src / shell.c 소스 코드는 더 이상 버전 제어하에 있지 않습니다. 이 파일은 이제 빌드 프로세스의 일부로 생성됩니다.
기타 미세 최적화는 CPU 사용을 약 2.1 % 줄입니다.
버그 수정:
OSSFuzz가 발견 한 잘못된 assert () 문을 수정하십시오. 티켓 cb91bf4290c211d
sqlite3_result_pointer ()에서 모호한 메모리 누출 문제를 해결합니다. 티켓 7486aa54b968e9b
쿼리 계획자가 실행을 마칠 때까지 스키마 재설정을 연기하여 가능한 use-after-free 오류를 피하십시오. 티켓 be436a7f4587ce5
COLLATE가 맞으면 ORDER BY 또는 GROUP BY를 최적화하기 위해 인덱스 식에서 만 사용하십시오. 티켓 e20dd54ab0e4383
index-on-expression의 표현식이 실제로 상수 일 때 일어났던 단정 오류를 수정했습니다. 티켓 aa98619ad08ddca
PRAGMA reverse_unordered_selects 다음에 발생할 수있는 어설 션 오류를 수정합니다. 티켓 cb91bf4290c211d
IN 또는 EXISTS 하위 쿼리에서 테이블 반환 함수를 사용하는 쿼리에 발생할 수있는 segfault를 수정합니다. 티켓 b899b6042f97f5
특정 끔찍한 공통 테이블 식을 컴파일 할 때 잠재적 인 정수 오버 플로우 문제를 수정했습니다. 이것은 OSSFuzz가 발견 한 또 다른 문제점이었습니다. 체크인 6ee8cb6ae5.
Google Project Zero의 Natalie Silvanovich가 발견 한 손상된 데이터베이스 파일을 쿼리 할 때 잠재적 인 아웃 오브 바운드 읽기를 수정했습니다. 체크인 : 04925dee41a21f.
버전 3.20.1의 새로운 기능 :
버전 3.20.1 패치 릴리스는 드문 메모리 누출 문제를 해결하기 위해 sqlite3_result_pointer () 인터페이스에서 두 줄의 코드를 변경합니다.
버전 3.9.2의 새로운 기능 :
SQLite 버전 3.9.2는 두 가지 모호한 버그를 수정하는 패치 릴리스입니다.
버전 3.8.9의 새로운 기능 :
이 릴리스의 새로운 기능으로는 PRAGMA index_xinfo 명령, sqlite3_status64 () 인터페이스 및 명령 줄 셸의 ".dbinfo"명령이 있습니다.
버전 3.8.8.2의 새로운 기능 :
3.8.8.2 패치 릴리스는 단일 사소한 문제를 수정합니다. 로그가 이미 재설정되고 새 내용이없는 경우에도 sqlite3_wal_checkpoint (TRUNCATE) 작업이 미리 쓰기 미리 기록을 항상 자릅니다. 버그 수정이나 새로운 기능인지는 확실하지 않습니다.
이와 같은 것은 일반적으로 다음 정기 릴리스에 포함되지만, 현저한 SQLite 사용자가 변경 사항을 급하게 필요로하므로이 패치를 통해 신속하게 해결할 수있었습니다.
sqlite3_wal_checkpoint (TRUNCATE)의 향상된 동작이 실제로 필요하지 않으면 업그레이드 할 이유가 없습니다.
버전 3.8.8.1의 새로운 기능 :
ORDER BY 절, LIMIT 절을 포함하고 결과 집합에 약 60 개 이상의 열을 갖는 쿼리에서 출력이 잘못된 순서로 나타나는 원인이 될 수있는 버전 3.8.4부터 제공된 정렬 논리의 버그를 수정했습니다. . 티켓 f97c4637102a3ae72b79.
SQLITE_SOURCE_ID : "2015-01-20 16:51:25 f73337e3e289915a76ca96e7a05a1a8d4e890d55"
sqlite3.c에 대한 SHA1 : 33987fb50dcc09f1429a653d6b47672f5a96f19e
버전 3.8.8의 새로운 기능 :
새로운 기능 :다른 프로세스가 데이터베이스 파일을 수정했는지 확인하는 데 사용할 수있는 PRAGMA data_version 명령이 추가되었습니다.
sqlite3_wal_checkpoint_v2 () 인터페이스에 SQLITE_CHECKPOINT_TRUNCATE 옵션을 추가했으며 PRAGMA wal_checkpoint에 해당하는 기능이 향상되었습니다.
SQLITE_ENABLE_STMT_SCANSTATUS로 컴파일 할 때만 사용할 수있는 sqlite3_stmt_scanstatus () 인터페이스가 추가되었습니다.
sqlite3_table_column_metadata ()는 WITHOUT ROWID 테이블에서 제대로 작동하고 열 이름 매개 변수가 NULL 인 경우 테이블이 있는지 확인하도록 향상되었습니다. SQLITE_ENABLE_COLUMN_METADATA 컴파일 타임 옵션을 사용하지 않아도 인터페이스가 기본적으로 빌드에 포함됩니다.
SQLITE_ENABLE_API_ARMOR 컴파일 타임 옵션이 추가되었습니다.
SQLITE_REVERSE_UNORDERED_SELECTS 컴파일 시간 옵션이 추가되었습니다.
SQLITE_SORTER_PMASZ 컴파일 타임 옵션과 SQLITE_CONFIG_PMASZ 시작 시간 옵션을 추가했습니다.
sqlite3_config ()에 SQLITE_CONFIG_PCACHE_HDRSZ 옵션을 추가하여 응용 프로그램이 SQLITE_CONFIG_PAGECACHE에 사용할 적절한 메모리 양을보다 쉽게 결정할 수있게했습니다.VALUES 절의 행 수는 더 이상 SQLITE_LIMIT_COMPOUND_SELECT에 의해 제한되지 않습니다.
재귀 적으로 SQL을 평가할 eval () SQL 함수를 구현하는 eval.c loadable 확장을 추가했습니다.
성능 향상 :
B- 트리 균형 조정과 관련된 memcpy () 작업의 수를 줄여 전체 성능을 3.2 % 향상시킵니다.
스킵 스캔 최적화를위한 비용 견적의 향상.
자동 인덱싱 최적화가 적절한 경우 부분 인덱스를 생성 할 수 있습니다.
버그 수정:
저널 파일을 자른 직후에 fsync ()를 호출하여 "PRAGMA journal_mode = TRUNCATE"로 정전 후 내구성을 확인하십시오.
이제 쿼리 계획자는 LEFT JOIN의 오른쪽 테이블에있는 열이 NOT NULL 제약 조건을 갖고 있더라도 NULL이 될 수 있음을 인식합니다. 이러한 경우에 NULL 테스트를 최적화하려고하지 마십시오. 6f2222d550f5b0ee7ed 티켓 수정.
DISTINCT 연산자가 내림차순 인덱스를 사용하여 구현 된 경우에도 ORDER BY가 행을 오름차순으로 놓아야합니다. 티켓 c5ea805691bfc4204b1cb9e 수정.
일부 스레드가 연결을 열고 닫는 공유 캐시 모드에서 많은 스레드로 실행할 때 스트레스를받을 수있는 데이터 경쟁을 수정합니다.
american fuzzy lop에서 발견 된 애매한 충돌 버그를 수정했습니다. 티켓 a59ae93ee990a55.
-O3으로 컴파일 할 때 R-Tree 확장이 잘못된 결과를 계산하게하는 GCC 최적화 도구 버그 (MacOS 10.7의 gcc 4.2.1)를 해결합니다.
기타 변경 사항 :
-DHAVE_STRCHRNULL 컴파일 타임 옵션을 사용하여 특별히 활성화하지 않는 한 strchrnul () C 라이브러리 루틴의 사용을 비활성화합니다.
likelihood (), likely () 및 unlikely () SQL 힌트 함수의 효율성과 정확성이 향상되었습니다.
SQLITE_SOURCE_ID : "2015-01-16 12:08:06 7d68a42face3ab14ed88407d4331872f5b243fdf"
sqlite3.c에 대한 SHA1 : 91aea4cc722371d58aae3d22e94d2a4165276905
버전 3.8.7.4의 새로운 기능 :
이 릴리스는 3.8.7.3 패치의 변경에 필요한 뮤텍스에서 추가되었지만 실수로 생략되었습니다. 뮤텍스는 내부 SQLite 테스트에서 필요하지는 않지만 파이어 폭스 없이는 충돌이 발생한다. 뮤텍스가 다시는 누락되지 않도록 테스트 사례가 추가되었습니다.
버전 3.8.7.3의 새로운 기능 :
버그 수정 : 캐시 된 KeyInfo 객체 (애플리케이션에서 볼 수없는 내부 추상화)가 공유 캐시 모드에서 작동하고 일부 데이터베이스 연결을 자주 닫거나 다시 열지 않고 동일한 공유 캐시의 다른 데이터베이스 연결을 계속 열어 두지 않는지 확인하십시오. e4a18565a36884b00edf 티켓.
버그 수정 : LEFT JOIN의 오른쪽 테이블에있는 열은 열에 NOT NULL 제약 조건이 있어도 NULL이 될 수 있습니다. 열이 NULL이 아닌 것으로 가정하는 최적화를 적용하지 마십시오. 티켓 6f2222d550f5b0ee7ed.
SQLITE_SOURCE_ID : "2014-12-05 22:29:24 647e77e853e81a5effeb4c33477910400a67ba86"
sqlite3.c에 대한 SHA1 : 3ad2f5ba3a4a3e3e51a1dac9fda9224b359f0261
버전 3.8.7.2의 새로운 기능 :
이 릴리스의 주된 이유는 ROLLBACK 명령을 개선하여 ROLLBACK이 스키마를 변경하지 않는 한 동일한 데이터베이스 연결에서 조회를 계속 실행하도록 허용하는 것입니다. SQLite의 모든 이전 버전에서 ROLLBACK은 보류중인 쿼리를 즉시 중단하고 SQLITE_ABORT 또는 SQLITE_ABORT_ROLLBACK을 반환합니다. ROLLBACK이 데이터베이스 스키마를 변경하더라도 보류중인 쿼리는 여전히 중단되지만이 패치 릴리스에서는 스키마가 수정되지 않은 경우 쿼리가 계속 실행될 수 있습니다.
ROLLBACK 향상 외에도이 패치 릴리스에는 3 개의 모호한 버그에 대한 수정 사항이 포함되어 있습니다.
버전 3.8.7.1의 새로운 기능 :
이 버그 수정 릴리즈의 주된 이유는 ALTER TABLE ADD COLUMN을 사용하여 추가 된 테이블 끝에있는 필드의 값을 업데이트하는 문제를 해결하는 것입니다. 이 문제점 1은 3.8.7 릴리스에서 처음 나타났습니다.
3.8.7 릴리스의 또 다른 사소한 성가심은 안드로이드 빌드가 표준 C 라이브러리의 strchrnul () 함수를 사용하려고 시도했지만 Android에서 해당 기능을 사용할 수 없다는 사실이었습니다. 안드로이드 빌드는 문제를 해결하기 위해 -DHAVE_STRCHRNUL = 0을 추가해야했습니다. 이 패치는 안드로이드 빌드가 이제 아무런 수정없이 작동 할 수 있도록 수정합니다.
PRAGMA synchronous = FULL 일 때 저널 파일을 자른 후 fsync ()를 호출하도록 PRAGMA journal_mode = TRUNCATE의 조작이 향상되었습니다. 이렇게하면 커밋 직후에 정전이 발생할 경우 트랜잭션 내구성을 보존하는 데 도움이됩니다.
마지막으로 VIEW에서 UPDATE 및 DELETE를 실행하는 것과 관련하여 오랫동안 이어져 왔던 두 가지 문제가 수정되었습니다.
버전 3.8.7의 새로운 기능 :
이전 릴리스의 대부분의 변경 사항은 SQLite가 좀 더 빨리 실행될 수 있도록 설계된 마이크로 최적화 기능입니다. 각각의 개별 최적화는 성능에 미치는 영향이 미미합니다. 그러나 개선 사항이 추가됩니다. Linux에서 cachegrind를 사용하고 gcc 4.8.1 및 x64 Linux에서 컴파일 된 잘 정의 된 작업 부하 (일반적인 응용 프로그램 작업 부하에 대한 프록시로 SQLite 개발자가 사용함)에서 측정 한 현재 릴리스는 20 % 이전 릴리스와 동일한 수의 CPU주기. Cachegrind는 실제 CPU가 아니며 측정에 사용되는 작업량은 프록시 일뿐입니다. 따라서 귀하의 실적은 다를 수 있습니다. 우리는 실제 애플리케이션에서 측정되고보고 된 개선의 절반 정도를 기대하고 있습니다. 10 %는 20 % 미만이지만 여전히 꽤 좋습니다.이 릴리스에는 부호있는 32 비트 길이 매개 변수 대신 부호없는 64 비트를 가진 새로운 C 언어 인터페이스 세트가 포함되어 있습니다. 새로운 API는 새로운 기능을 제공하지 않습니다. 그러나 정수 오버 플로우 취약점에 대한 내성이 강한 응용 프로그램을 작성하는 것이 쉽습니다.
이 릴리스에는 큰 정렬 작업을 돕기 위해 여러 스레드를 사용할 수있는 새로운 정렬기도 포함되어 있습니다. (정렬 작업은 때때로 ORDER BY 및 / 또는 GROUP BY 절을 구현하는 데 필요하며 거의 항상 CREATE INDEX에 필요합니다.) 다중 스레드 분류기는 기본적으로 해제되어 있으며 PRAGMA threads SQL 명령을 사용하여 활성화해야합니다. 멀티 스레드 분류기는 큰 정렬에 대해 더 빠른 실시간 성능을 제공하지만 더 많은 CPU 사이클과 더 많은 에너지를 사용합니다.
버전 3.8.3.1의 새로운 기능 :
SQLite 버전 3.8.3.1은 쿼리가 유효한 외부 행을 생략하도록 만들 수있는 버전 3.8.1, 3.8.2 및 3.8.3에있는 버그를 수정합니다. 해당 버전에서 업그레이드하는 것이 좋습니다.
이 문제는 SQLite가 SQLITE_ENABLE_STAT3 또는 SQLITE_ENABLE_STAT4 컴파일 타임 옵션으로 컴파일 된 경우에만 발생합니다. 이 경우 쿼리에 다음과 같은 표현식이 포함 된 WHERE 절이 있으면 :
WHERE (expr1 OR expr2 OR ... 또는 exprN) AND 열이 NULL이 아닙니다.
expr1에서 exprN까지 모두 인덱스에서 사용하기에 적합하다면 쿼리 계획 중에 SQLite는 실수로 "열 IS NOT NULL"용어를 "열 & gt; NULL"로 변환 할 수 있습니다. 그러나 후자는 결코 사실이 아니므로 질의는 아무 행도 반환하지 않습니다.
버전 3.8.3의 새로운 기능 :
공통 테이블 식과 WITH 절에 대한 지원이 추가되었습니다.printf () SQL 함수를 추가했습니다.
SQLite_DETERMINISTIC을 sqlite3_create_function () 및 관련 인터페이스의 네 번째 인수에 선택적 비트로 추가하여 응용 프로그램에 정수 인수가있을 때 내부 루프에서 인수 분해 할 수있는 새 함수를 생성 할 수 있도록합니다.
트랜잭션의 시작 부분에 반환 된 SQLITE_READONLY_DBMOVED 오류 코드를 추가하여 기본 데이터베이스 파일의 이름이 변경되었거나 SQLite에서 이동 된 것을 나타냅니다.
ATTACH의 filename 인수에 함수 호출 및 하위 쿼리를 포함한 임의의 표현식을 허용합니다.
SELECT 문이 유효한 모든 위치에서 VALUES 절을 사용할 수있게하십시오.
N == 0으로 호출 될 때 sqlite3_randomness (N, P)에 의해 사용 된 PRNG를 재사용하십시오. unix에서 fork ()를 수행 한 후 자동으로 다시 시드합니다.
spellfix1 가상 테이블을 향상시켜 rowid에 의해 효율적으로 검색 할 수있게하십시오.
성능 향상.
EXPLAIN을 실행할 때 VDBE 바이트 코드 디스플레이의 주석에 대한 개선.
"% token_class"지시문을 LEMON 파서 생성기에 추가하고이를 사용하여 문법을 단순화하십시오.OpenBSD가 위험하다고 생각하는 C 라이브러리 함수를 호출하지 않도록 LEMON 소스 코드를 변경하십시오. (예 : sprintf).
버그 수정 : 명령 줄 셸 CSV 가져 오기 기능에서 CRLN 줄 끝에 이스케이프 된 큰 따옴표가 있으면 필드를 끝내지 마십시오.
SQLITE_SOURCE_ID : "2014-02-03 13:52:03 e816dd924619db5f766de6df74ea2194f3e3b538"
sqlite3.c에 대한 SHA1 : 98a07da78f71b0275e8d9c510486877adc31dbee
댓글을 찾을 수 없습니다