ATTACH DATABASE

ATTACH DATABASE

SQLite에서 ATTACH DATABASE 명령은 현재 데이터베이스 연결에 다른 데이터베이스 파일을 추가해요. 이 명령을 사용하면 연결된 데이터베이스의 테이블을 원하는 이름으로 접근할 수 있어요. 이 페이지에서는 ATTACH DATABASE의 문법과 사용 방법을 설명해요.

출처: 문서

본문

1. 개요

attach-stmt:

ATTACH DATABASE expr AS schema-name

expr:

literal-value bind-parameter schema-name . table-name . column-name unary-operator expr expr binary-operator expr function-name ( function-arguments ) filter-clause over-clause ( expr ) , CAST ( expr AS type-name ) expr COLLATE collation-name expr NOT LIKE GLOB REGEXP MATCH expr expr ESCAPE expr expr ISNULL NOTNULL NOT NULL expr IS NOT DISTINCT FROM expr expr NOT BETWEEN expr AND expr expr NOT IN ( select-stmt ) expr , schema-name . table-function ( expr ) table-name , NOT EXISTS ( select-stmt ) CASE expr WHEN expr THEN expr ELSE expr END raise-function

filter-clause:

FILTER ( WHERE expr )

function-arguments:

DISTINCT expr , * ORDER BY ordering-term ,

ordering-term:

expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

literal-value:

CURRENT_TIMESTAMP numeric-literal string-literal blob-literal NULL TRUE FALSE CURRENT_TIME CURRENT_DATE

over-clause:

OVER window-name ( base-window-name PARTITION BY expr , ORDER BY ordering-term , frame-spec )

frame-spec:

GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING RANGE ROWS UNBOUNDED PRECEDING expr PRECEDING CURRENT ROW expr PRECEDING CURRENT ROW expr FOLLOWING expr PRECEDING CURRENT ROW expr FOLLOWING EXCLUDE CURRENT ROW EXCLUDE GROUP EXCLUDE TIES EXCLUDE NO OTHERS

ordering-term:

expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

raise-function:

RAISE ( ROLLBACK , expr ) IGNORE ABORT FAIL

select-stmt:

WITH RECURSIVE common-table-expression , SELECT DISTINCT result-column , ALL FROM table-or-subquery join-clause , WHERE expr GROUP BY expr HAVING expr , WINDOW window-name AS window-defn , VALUES ( expr ) , , compound-operator select-core ORDER BY LIMIT expr ordering-term , OFFSET expr , expr

common-table-expression:

table-name ( column-name ) AS NOT MATERIALIZED ( select-stmt ) ,

compound-operator:

UNION UNION INTERSECT EXCEPT ALL

join-clause:

table-or-subquery join-operator table-or-subquery join-constraint

join-constraint:

USING ( column-name ) , ON expr

join-operator:

NATURAL LEFT OUTER JOIN , RIGHT FULL INNER CROSS

ordering-term:

expr COLLATE collation-name DESC ASC NULLS FIRST NULLS LAST

result-column:

expr AS column-alias * table-name . *

table-or-subquery:

schema-name . table-name AS table-alias INDEXED BY index-name NOT INDEXED table-function-name ( expr ) , AS table-alias ( select-stmt ) ( table-or-subquery ) , join-clause

window-defn:

( base-window-name PARTITION BY expr , ORDER BY ordering-term , frame-spec )

frame-spec:

GROUPS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING RANGE ROWS UNBOUNDED PRECEDING expr PRECEDING CURRENT ROW expr PRECEDING CURRENT ROW expr FOLLOWING expr PRECEDING CURRENT ROW expr FOLLOWING EXCLUDE CURRENT ROW EXCLUDE GROUP EXCLUDE TIES EXCLUDE NO OTHERS

type-name:

name ( signed-number , signed-number ) ( signed-number )

signed-number:

+ numeric-literal -

ATTACH DATABASE 문은 현재 데이터베이스 연결에 다른 데이터베이스 파일을 추가해요. 이전에 연결한 데이터베이스 파일은 DETACH DATABASE 명령으로 제거할 수 있어요.

2. 상세 내용

연결할 데이터베이스의 파일명은 AS 키워드 앞에 오는 표현식(expr)의 값이에요. 데이터베이스의 파일명은 sqlite3_open() 및 sqlite3_open_v2()의 파일명 인자와 동일한 의미 체계를 따라요. 특별한 이름 :memory:는 인메모리 데이터베이스를 만들고, 빈 문자열은 새로운 임시 데이터베이스를 만들어요. 파일명 인자는 데이터베이스 연결에서 URI 파일명 처리가 활성화된 경우 URI 파일명이 될 수 있어요. URI 파일명은 기본적으로 비활성화되어 있지만, SQLite의 향후 릴리스에서 변경될 수 있으므로 애플리케이션 개발자는 이에 대비해 계획을 세우는 것이 좋아요.

AS 키워드 뒤에 오는 이름은 SQLite가 내부적으로 사용하는 데이터베이스 이름이에요. 스키마 이름 maintemp는 각각 기본 데이터베이스와 임시 테이블용 데이터베이스를 가리켜요. main 및 temp 데이터베이스는 연결하거나 분리할 수 없어요.

연결된 데이터베이스는 vfs=NAME URI 플래그로 다른 VFS를 지정하지 않는 한 기본 데이터베이스와 동일한 VFS를 사용해요.

연결된 데이터베이스의 테이블은 schema-name.table-name 구문으로 참조할 수 있어요. 테이블 이름이 모든 연결된 데이터베이스와 main 및 temp 데이터베이스 전체에서 고유하다면 schema-name 접두사는 필요하지 않아요. 서로 다른 데이터베이스에 있는 두 개 이상의 테이블이 같은 이름을 갖고 테이블 참조에 schema-name 접두사를 사용하지 않으면, 가장 최근에 연결되지 않은 데이터베이스의 테이블이 선택돼요.

여러 연결된 데이터베이스를 포함하는 트랜잭션은 기본 데이터베이스가 :memory:가 아니고 journal_mode가 WAL이 아닐 때 원자적이에요. 기본 데이터베이스가 :memory:이거나 journal_mode가 WAL이면 각 개별 데이터베이스 파일 내에서는 트랜잭션 원자성이 계속 유지돼요. 그러나 호스트 컴퓨터가 둘 이상의 데이터베이스 파일이 업데이트되는 COMMIT 도중에 충돌하면 일부 파일은 변경 사항을 받지만 다른 파일은 받지 못할 수 있어요.

단일 데이터베이스 연결에 동시에 연결할 수 있는 데이터베이스 수에는 sqlite3_limit() 및 SQLITE_LIMIT_ATTACHED로 설정되는 제한이 있어요.

이 페이지는 2025-02-06 23:19:09Z에 마지막으로 업데이트되었어요.

더 알아보기 (Learn more)