SQLite 자습서(3): 데이터 시트 및 뷰 소개
이 명령의 문법 규칙과 사용 방식은 대부분의 관계형 데이터베이스와 기본적으로 같기 때문에 우리는 SQLite에서 표를 만드는 각종 규칙을 예시적으로 보여 준다.그러나 일부 SQLite 특유의 규칙에 대해서는 추가 설명을 드리겠습니다.주: 아래의 모든 예는 sqlite 자체 명령행 도구에서 완성되었습니다.
1). 가장 간단한 데이터 테이블:
sqlite> CREATE TABLE testtable (first_col integer);
사용자 정의 데이터 테이블 이름, 예를 들어testtable는 sqlite_로이 접두사로 정의된 테이블 이름은 sqlite 내부에 사용되기 때문에 시작합니다.2). 기본값이 있는 데이터 테이블을 생성합니다.
sqlite> CREATE TABLE testtable (first_col integer DEFAULT 0, second_col varchar DEFAULT 'hello');
3). 지정된 데이터베이스에 테이블을 만들려면 다음과 같이 하십시오.
sqlite> ATTACH DATABASE 'd:/mydb.db' AS mydb;
sqlite> CREATE TABLE mydb.testtable (first_col integer);
여기에 ATTACH DATABASE 명령을 통해 이미 존재하는 데이터베이스 파일attach를 현재 연결에 연결한 다음 데이터베이스 이름을 지정하는 방식으로 대상 데이터베이스에 mydb와 같은 데이터 테이블을 만듭니다.testtable.이 규칙에 대한 추가 설명이 필요합니다. 만약에 우리가 데이터 테이블을 만들 때 데이터베이스 이름을 지정하지 않았다면 현재 연결된main 데이터베이스에서 이 테이블을 만들 것입니다. 하나의 연결에main 데이터베이스만 있을 수 있습니다.임시 테이블을 만들 필요가 있으면 데이터베이스 이름을 지정할 필요가 없습니다. 다음 예제를 보십시오.- 임시 테이블과 일반 테이블 두 개를 만듭니다.
sqlite> CREATE TEMP TABLE temptable(first_col integer);
sqlite> CREATE TABLE testtable (first_col integer);
- 현재 접속의 캐시 데이터를 로컬 파일로 내보내고 현재 접속을 종료합니다.
sqlite> .backup d:/mydb.db
sqlite> .exit
- sqlite 연결을 다시 설정하고 방금 내보낸 데이터베이스를 메인 라이브러리로 다시 가져옵니다.
sqlite> .restore d:/mydb.db
- 이 데이터베이스에 있는 테이블 정보를 보면 임시 테이블이 데이터베이스 파일에 오래 지속되지 않았다는 것을 알 수 있습니다.
sqlite> .tables
testtable
4). "IF NOT EXISTS"종문:현재 생성된 데이터 테이블 이름이 이미 존재합니다. 즉, 이미 존재하는 테이블 이름, 보기 이름, 색인 이름과 충돌하면 이번 생성 작업이 실패하고 오류가 발생합니다.그러나 테이블을 만들 때 "IF NOT EXISTS"종문을 추가하면 현재 테이블 이름과 색인 이름이 충돌하지 않는 한 이 창설 작업은 아무런 영향을 주지 않습니다.
sqlite> CREATE TABLE testtable (first_col integer);
Error: table testtable already exists
sqlite> CREATE TABLE IF NOT EXISTS testtable (first_col integer);
5). CREATE TABLE ... AS SELECT:이 방법으로 생성된 데이터 테이블은 SELECT 쿼리로 반환된 결과 세트와 동일한 Schema 정보를 가지지만 기본값과 키 등의 제약 정보는 포함되지 않습니다.그러나 새로 만든 테이블에는 결과 집합이 반환하는 모든 데이터가 포함됩니다.
sqlite> CREATE TABLE testtable2 AS SELECT * FROM testtable;
sqlite> .schema testtable2
CREATE TABLE testtable2(first_col INT);
.schema 명령은 sqlite3 명령행 도구의 내장 명령으로 현재 데이터 테이블을 표시하는 CREATE TABLE 문구입니다. 6). 주 키 구속조건:
-- 。
sqlite> CREATE TABLE testtable (first_col integer PRIMARY KEY ASC);
-- , , first_col second_col 。
sqlite> CREATE TABLE testtable2 (
...> first_col integer,
...> second_col integer,
...> PRIMARY KEY (first_col,second_col)
...> );
다른 관계형 데이터베이스와 마찬가지로 메인 키는 유일해야 한다.7). 고유 구속조건:
-- 。
sqlite> CREATE TABLE testtable (first_col integer UNIQUE);
-- , , 。
sqlite> CREATE TABLE testtable2 (
...> first_col integer,
...> second_col integer,
...> UNIQUE (first_col,second_col)
...> );
SQLite ,NULL , NULL , :
sqlite> DELETE FROM testtable;
sqlite> SELECT count(*) FROM testtable;
count(*)
----------
0
sqlite> INSERT INTO testtable VALUES(NULL);
sqlite> INSERT INTO testtable VALUES(NULL);
sqlite> SELECT count(*) FROM testtable;
count(*)
----------
2
두 번 삽입된 NULL 값이 모두 삽입되었음을 알 수 있습니다.8). 비어 있음(NOT NULL) 구속조건:
sqlite> CREATE TABLE testtable(first_col integer NOT NULL);
sqlite> INSERT INTO testtable VALUES(NULL);
Error: testtable.first_col may not be NULL
출력 결과에서 알 수 있듯이first_col에 비공백 구속이 정의되어 있으므로 NULL 값을 삽입할 수 없습니다. 9). 체크 구속조건:
sqlite> CREATE TABLE testtable (first_col integer CHECK (first_col < 5));
sqlite> INSERT INTO testtable VALUES(4);
sqlite> INSERT INTO testtable VALUES(20); -- 20 first_col (first_col < 5)
Error: constraint failed
-- , 。
sqlite> CREATE TABLE testtable2 (
...> first_col integer,
...> second_col integer,
...> CHECK (first_col > 0 AND second_col < 0)
...> );
2. 테이블의 수정:SQLite는 테이블 이름을 수정하고 새 필드를 추가하는 것만으로도 ALTER TABLE 명령에 제한적으로 지원됩니다.필드 이름 바꾸기, 필드 삭제, 삭제 제약 추가 등 다른 기능은 지원됩니다.
1). 테이블 이름을 수정하려면 다음과 같이 하십시오.
먼저 설명해야 할 것은 SQLite에서 테이블 이름의 수정은 같은 데이터베이스에서만 가능하며, 이를 Attached 데이터베이스로 이동할 수 없다는 것이다.게다가 테이블 이름이 수정되면 이 테이블에 존재하는 인덱스는 영향을 받지 않지만, 이 테이블에 의존하는 보기와 트리거는 정의를 다시 수정해야 한다.
sqlite> CREATE TABLE testtable (first_col integer);
sqlite> ALTER TABLE testtable RENAME TO testtable2;
sqlite> .tables
testtable2
통과테이블 명령의 출력을 보면 테이블testtable이testtable2로 수정되었습니다. 2). 새 필드:
sqlite> CREATE TABLE testtable (first_col integer);
sqlite> ALTER TABLE testtable ADD COLUMN second_col integer;
sqlite> .schema testtable
CREATE TABLE "testtable" (first_col integer, second_col integer);
통과schema 명령의 출력을 보면 표testtable의 정의에 추가 필드가 포함되어 있음을 알 수 있습니다. ALTER TABLE에 대해 마지막으로 설명해야 할 것은 SQLite에서 이 명령의 실행 시간은 현재 표의 줄 수에 영향을 받지 않는다는 것이다. 즉, 천만 줄의 데이터가 있는 표를 수정하는 것과 한 개의 데이터만 있는 표를 수정하는 데 걸리는 시간은 거의 같다는 것이다.
3. 테이블 삭제:
SQLite에서 테이블이 삭제되면 이와 관련된 인덱스와 트리거도 삭제됩니다.많은 다른 관계형 데이터베이스에서는 이러면 안 됩니다. 관련 대상을 삭제해야 한다면 삭제표 문장에 WITH CASCADE 종문만 추가할 수 있습니다.다음 예제를 참조하십시오.
sqlite> CREATE TABLE testtable (first_col integer);
sqlite> DROP TABLE testtable;
sqlite> DROP TABLE testtable;
Error: no such table: testtable
sqlite> DROP TABLE IF EXISTS testtable;
위의 예에서 알 수 있듯이 삭제된 테이블이 존재하지 않으면 SQLite는 오류를 보고하고 오류 정보를 출력합니다.실행할 때 예외를 던지지 않으려면 CREATE TABLE의 의미와 완전히 같은 IF EXISTS 종문을 추가할 수 있습니다.4. 뷰를 만듭니다.
여기에는 간단한 SQL 명령 예시만 제시할 뿐, 구체적인 의미와 기술적 세부 사항은 위의 창설 데이터 테이블 부분, 예를 들어 임시 보기, "IF NOT EXISTS"종문 등을 참조할 수 있다.
1). 가장 간단한 보기:
sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;
2). 임시 뷰를 만들려면 다음과 같이 하십시오.
sqlite> CREATE TEMP VIEW tempview AS SELECT * FROM testtable WHERE first_col > 100;
3). "IF NOT EXISTS"종문:
sqlite> CREATE VIEW testview AS SELECT * FROM testtable WHERE first_col > 100;
Error: table testview already exists
sqlite> CREATE VIEW IF NOT EXISTS testview AS SELECT * FROM testtable WHERE first_col > 100;
5. 뷰 삭제:이 작업의 구문은 삭제표와 기본적으로 같기 때문에 여기에는 예만 나와 있습니다.
sqlite> DROP VIEW testview;
sqlite> DROP VIEW testview;
Error: no such view: testview
sqlite> DROP VIEW IF EXISTS testview;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SQLite 데이터베이스 설치 및 기본 운영 설명서대부분의 경우 - SQLite의 바이너리 파일이 존재하는지 확인하면 데이터베이스를 만들고 연결하며 사용할 수 있다.내장형 데이터베이스 항목이나 솔루션을 찾고 있다면 SQLite는 매우 고려할 만합니다. SQLite ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.