복붙노트

[SQL] 합니까 sqlite3를 외부 키 제약 조건을 지원하지?

SQL

합니까 sqlite3를 외부 키 제약 조건을 지원하지?

내가 sqlite3를에 문제가입니다.

나는 다음과 같은 SQL 스크립트를 사용하여 두 테이블 명 및 주문을 만들었습니다 :

sqlite> create table Persons(
            P_Id int primary key,
            LastName varchar,
            FirstName varchar,
            Address varchar,
            City varchar
        );

sqlite> create table Orders(
            O_Id int NOT NULL,
            OrderNo int NOT NULL,
            P_Id int, 
            PRIMARY KEY (O_Id),
            FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
        );

sqlite> insert into Orders values(1,77895,3);

sqlite> select * from Orders;

1|77895|3

sqlite>

위격 테이블이 비록 빈 행은 주문 테이블에 삽입 할 수 있습니다.

그것은 오류를 표시하지 않습니다.

이것이 어떻게 가능한지.

해결법

  1. ==============================

    1.SQLite는 3.x를, 당신은 다음 쿼리 당신이 SQLite 데이터베이스에 연결할 때마다 확인해야합니다 :

    SQLite는 3.x를, 당신은 다음 쿼리 당신이 SQLite 데이터베이스에 연결할 때마다 확인해야합니다 :

    PRAGMA foreign_keys = ON;
    

    그렇지 않으면 SQLite는 모든 외래 키 제약 조건을 무시합니다.

    왜 때마다? 하여 문서에 따라 SQLite는 2.X와 이전 버전과의 호환성.

    SQLite는 4.x의에서 FK 제약은 기본적으로 활성화됩니다.

  2. ==============================

    2.SQLite는 외래 키 지원

    SQLite는 외래 키 지원

    sqlite> PRAGMA foreign_keys = ON;
    

    이 외래 키 제약 조건을 가능하게 할 것이다.

  3. ==============================

    3.당신의 SQLite는 활성화하면 외래 키 제약 조건이있는 경우 체크 아웃 : http://sqlite.org/foreignkeys.html#fk_enable

    당신의 SQLite는 활성화하면 외래 키 제약 조건이있는 경우 체크 아웃 : http://sqlite.org/foreignkeys.html#fk_enable

  4. ==============================

    4.당신은 문서를 읽어나요? 메인 페이지는이 버전 3.6.19 도입 말한다. 링크 쇼는 어떻게 외래 키를 사용하여 (코드는 올바른입니다).

    당신은 문서를 읽어나요? 메인 페이지는이 버전 3.6.19 도입 말한다. 링크 쇼는 어떻게 외래 키를 사용하여 (코드는 올바른입니다).

    당신의 코드는 생략 오류 메시지를 제공합니까? 설명서에 명시된에 모든 전제 조건을 확인 했습니까?

  5. from https://stackoverflow.com/questions/9937713/does-sqlite3-not-support-foreign-key-constraints by cc-by-sa and MIT license