2010-06-11 2 views
8

다음 외부 키 제약 조건이 SQLite에 의해 적용되지 않는 이유는 무엇입니까? 어떻게 관계를 강화할 수 있습니까?외래 키가 적용되지 않습니다.

Assuming the library is compiled with foreign key constraints enabled, it must still be enabled by the application at runtime, using the PRAGMA foreign_keys command. For example:

sqlite> PRAGMA foreign_keys = ON;

Foreign key constraints are disabled by default (for backwards compatibility), so must be enabled separately for each database connection separately.

당신이 관련 관련 PRAGMA 것을 사용해 본 적이 : the relevant docs으로

CREATE TABLE User (
    UserID TEXT Unique NOT NULL PRIMARY KEY, 
    FirstName TEXT NOT NULL, 
    LastName TEXT NOT NULL, 
    Username TEXT NOT NULL, 
    Password TEXT NOT NULL, 
    Email TEXT NOT NULL, 
    SignupDate TEXT NOT NULL 
) 

CREATE TABLE Category (
    CategoryID TEXT Unique NOT NULL PRIMARY KEY, 
    UserID TEXT, 
    FOREIGN KEY(UserID) REFERENCES User(UserID) 
) 

답변

12

은 (외래 키 지원 활성화 섹션 2 년) 말? (docs가 말한 것처럼, sqlite가 적절하게 컴파일되고, 외래 키 제약 조건을 적용 할 수있는 최신 버전도 있다고 가정). 또한 ConnectionString을에 내장을 통해 외래 키 지원을 켤 수 있습니다

+0

프롬프트 응답을 주셔서 정말 감사합니다. 나는 문서에서 그것을 결코 알아 차리지 못했습니다 (다음 번에는 더 열심히 보일 것입니다). 그 명령을 실행 하려다가 "SQLite prepare()가 실패했습니다."오류 : 권한이 거부되었습니다. DETAILS : 권한이 없습니다. EXPRESSION : PRAGMA foreign_keys = ON; " 사용하고있는 버전이 지원 중이거나 기능이 사용 중지되었다고 가정합니다. 트리거를 사용하여 동일한 최종 결과를 만들 수 있습니까? 만약 그렇다면 누구든지 SQLite를위한 트리거 예제 구문을 제공 할 수 있습니까? –

+0

@Maxim, 나는 sqlite 외래 키 트리거가 평범한 오래된 외래 키와 동일한 기본 기능을 필요로한다고 생각한다. (종종 sqlite의 임베디드 빌드에서 제거되며, "전체 관계형 ACID 전원"을 제공하려는 것보다 작고 빠르다. 상당한 성능 및 설치 공간 비용). –

3

:

foreign keys=True 

예 :

"Data Source={DatabaseFullFilePath};Version=3;foreign keys=True;datetimeformat=CurrentCulture" 
관련 문제