배우기 전까지!
SQLite sql
ATTACH DATABASE
BEGIN TRANSACTION
댓글
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
표현식
INSERT
ON CONFLICT 절
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
sqlite FAQ
(1) 자동 증가 필드를 생성하는 방법은 무엇입니까?
짧은 대답: INTEGER PRIMARY KEY로 선언된 열은 자동으로 커집니다.
긴 답변: 테이블의 열을 INTEGER PRIMARY KEY로 선언하면 해당 열에 NULL 값을 삽입할 때마다 NULL은 자동으로 해당 열의 최대값보다 1 큰 값으로 변환됩니다. , 목록이 비어 있으면 1이 됩니다. (가능한 최대 기본 키가 9223372036854775807인 경우 키 값은 사용되지 않은 임의의 숫자가 됩니다.) 예를 들어 다음 목록이 있습니다.
CREATE TABLE t1(
a INTEGER PRIMARY KEY,
b INTEGER
);
이 테이블에서 다음 문
INSERT INTO t1 VALUES(NULL,123)
은 논리적으로 다음과 같습니다.
INSERT INTO t1 VALUES((SELECT max (a ) FROM t1) 1,123);
가장 최근에 삽입된 정수 값을 반환하는 sqlite3_last_insert_rowid()라는 새로운 API가 있습니다.
이 정수는 삽입 전 해당 열에 대한 테이블의 최대값보다 1이 더 큽니다. 이 키 값은 현재 테이블에서 고유합니다. 하지만 테이블에서 삭제된 값과 중복될 가능성은 있습니다. 테이블의 수명 주기 전체에 걸쳐 고유 키 값을 생성하려면 INTEGER PRIMARY KEY에 AUTOINCREMENT 문을 추가해야 합니다. 그러면 새 키 값은 테이블에 존재했던 최대값보다 1이 더 커집니다. 가능한 가장 큰 정수 값이 데이터 테이블에 존재하는 경우 INSERT는 SQLITE_FULL 오류 코드와 함께 실패합니다.
---------------------------------- -- ----------------------------------
(2)SQLite3는 어떤 데이터 유형을 지원합니까?
NULL
INTEGER
REAL
TEXT
BLOB
그러나 실제로 sqlite3은 다음 데이터 유형도 허용합니다:
smallint 16비트 정수.
정수 32비트 정수.
decimal(p,s) p의 정확한 값과 크기 s의 십진 정수입니다. 정확한 값 p는 전체 자릿수(digit)를 의미하고, s는 소수점 이하 자릿수를 의미합니다. 지정하지 않으면 시스템은 p=5로 설정됩니다.
부동 32비트 실수.
2배의 64비트 실수.
char(n) n 길이 문자열, n은 254를 초과할 수 없습니다.
varchar(n)은 가변 길이를 갖는 문자열이며 최대 길이 n은 4000을 초과할 수 없습니다.
graphic(n)은 char(n)과 동일하지만 단위는 2문자, 2바이트이고 n은 127을 초과할 수 없습니다. 이 형식은 한자 등 2자 길이의 글꼴을 지원하기 위한 것입니다.
vargraphic(n) 가변 길이 및 최대 길이 n을 갖는 두 문자 문자열, n은 2000을 초과할 수 없습니다.
날짜에는 연도, 월, 날짜가 포함됩니다.
시간에는 시, 분, 초가 포함됩니다.
타임스탬프에는 연도, 월, 일, 시, 분, 초, 천분의 일초가 포함됩니다.
http://www.sqlite.org/datatype3.html을 참조하세요.
--------------- ------------------------------------- -
(3)SQLite를 사용하면 정수 필드에 문자열을 삽입할 수 있습니다!
이것은 버그가 아닌 기능입니다. SQLite는 데이터 유형 제약 조건을 적용하지 않습니다. 모든 데이터는 모든 열에 삽입될 수 있습니다. 임의의 길이의 문자열을 정수 열에 삽입하거나 부동 소수점 숫자를 부울 열에 삽입하거나 날짜 값을 문자 열에 삽입할 수 있습니다. CREATE TABLE에 지정된 데이터 유형은 열에 대한 데이터 삽입을 제한하지 않습니다. 모든 열은 모든 길이의 문자열을 허용할 수 있습니다(한 가지 경우 제외: INTEGER PRIMARY KEY로 표시된 열은 64비트 정수만 저장할 수 있습니다. 이러한 열에 정수 이외의 데이터를 삽입하면 오류가 발생합니다. .
그러나 SQLite는 다음을 사용합니다. 예를 들어 문자열을 정수 열에 삽입하면 SQLite는 문자열을 정수로 변환하려고 시도하고 그렇지 않으면 정수를 삽입합니다. 이 속성은 유형 또는 열 선호도라고도 합니다.
------------ --------- ---------------------------- -----
( 4) SQLite는 왜 동일한 테이블의 서로 다른 두 행에서 0과 0.0을 기본 키로 사용하는 것을 허용하지 않습니까?
기본 키는 숫자 값이어야 합니다. 기본 키를 TEXT 유형으로 변경하면 작동하지 않습니다.
각 행에는 고유한 기본 키가 있어야 합니다. 숫자 열의 경우 SQLite는 '0'과 '0.0'을 정수로 비교할 때 동일하기 때문에 동일한 것으로 간주합니다(이전 질문 참조). 따라서 이 값은 고유하지 않습니다.
---------------------------------- -- ----------------------------------
(5) 여러 애플리케이션 또는 하나의 애플리케이션을 여러 개 애플리케이션 인스턴스가 동일한 데이터베이스 파일에 동시에 액세스할 수 있습니까?
여러 프로세스가 동시에 동일한 데이터베이스를 열 수 있습니다. 여러 프로세스가 동시에 SELECT 작업을 수행할 수 있지만 한 번에 하나의 프로세스만 데이터베이스를 변경할 수 있습니다.
SQLite는 읽기 및 쓰기 잠금을 사용하여 데이터베이스에 대한 액세스를 제어합니다. (읽기 및 쓰기 잠금을 지원하지 않는 Win95/98/ME와 같은 시스템에서는 확률적 시뮬레이션이 대신 사용됩니다.) 그러나 사용할 때는 주의하십시오. 데이터베이스 파일이 NFS 파일 시스템에 저장되어 있는 경우 이 잠금 메커니즘은 제대로 작동하지 않습니다. 이는 fcntl() 파일 잠금이 많은 NFS에서 올바르게 구현되지 않았기 때문입니다. 여러 프로세스가 동시에 데이터베이스에 액세스할 수 있는 경우 NFS에 데이터베이스 파일을 배치하지 않아야 합니다. Windows의 경우 Microsoft 설명서에 다음과 같이 나와 있습니다. share.exe 데몬을 실행하지 않고 FAT 파일 시스템을 사용하면 잠금이 제대로 작동하지 않을 수 있습니다. Windows에 대한 경험이 많은 사람들은 다음과 같이 말했습니다. 네트워크 파일의 경우 파일 잠금 구현에는 버그가 많고 신뢰할 수 없습니다. 그들의 말이 옳다면 둘 이상의 Windows 시스템 간에 데이터베이스를 공유하면 바람직하지 않은 문제가 발생할 수 있습니다.
우리는 SQLite만큼 많은 동시성을 처리할 수 있는 다른 내장 SQL 데이터베이스 엔진이 없다는 것을 알고 있습니다. SQLite를 사용하면 여러 프로세스가 동시에 데이터베이스를 열고 동시에 데이터베이스를 읽을 수 있습니다. 프로세스에서 쓰기를 원할 경우 업데이트 프로세스 중에 데이터베이스 파일을 잠가야 합니다. 하지만 이는 일반적으로 몇 밀리초에 불과합니다. 다른 프로세스는 쓰기 프로세스가 작업을 마칠 때까지 기다리기만 하면 됩니다. 일반적으로 다른 Embedded SQL 데이터베이스 엔진에서는 한 번에 하나의 프로세스만 데이터베이스에 연결할 수 있습니다.
그러나 클라이언트/서버 데이터베이스 엔진(예: PostgreSQL, MySQL 또는 Oracle)은 일반적으로 더 높은 수준의 동시성을 지원하고 여러 프로세스가 동시에 동일한 데이터베이스에 쓸 수 있도록 허용합니다. 데이터베이스에 대한 액세스를 제어하고 조정하는 단일 서버 프로세스가 항상 있기 때문에 이 메커니즘은 클라이언트/서버 구조의 데이터베이스에서 가능합니다. 애플리케이션에 많은 동시성이 필요한 경우 클라이언트/서버 데이터베이스 사용을 고려해야 합니다. 그러나 경험에 따르면 많은 애플리케이션에는 설계자가 상상했던 것보다 훨씬 적은 동시성이 필요한 경우가 많습니다.
SQLite가 다른 프로세스에 의해 잠긴 파일에 액세스하려고 하면 기본 동작은 SQLITE_BUSY를 반환하는 것입니다. 이 동작은 sqlite3_busy_handler() 또는 sqlite3_busy_timeout() API 함수를 사용하여 C 코드에서 조정할 수 있습니다.
---------------------------------- -- ---------------
현재 페이지 1/2 12다음 페이지
위 내용은 SQLite 데이터베이스 설치 내용을 포함하여 SQLite 데이터베이스 설치 PHP SQLite 학습노트와 FAQ 분석 페이지를 1/2에 소개한 내용입니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.