2014-09-04 4 views
0

SQL에 익숙하며 다른 테이블에 대한 외래 키 참조가있는 테이블을 만들려고합니다. 가까운 구문 오류가 계속 발생하고 이유를 파악할 수 없습니다.구문 오류 근처에 sqlite

먼저 아래 표를 SQL 문을 참조하십시오

sqlite> CREATE TABLE nl_central_teams ( 

    ...> id INTEGER PRIMARY KEY AUTOINCREMENT, 

    ...> team_name VARCHAR(64) NOT NULL, 

    ...> city VARCHAR(64) NOT NULL, 

    ...> main_color VARCAR(64) NOT NULL, 

    ...> created_at DATETIME NOT NULL, 

    ...> updated_at DATETIME NOT NULL 

    ...>); 

첫 번째 테이블은 잘 작동합니다.

두 번째 테이블

sqlite> CREATE TABLE managers(

    ...> id INTEGER PRIMARY KEY AUTOINCREMENT, 

    ...> first_name VARCHAR(64) NOT NULL, 

    ...> last_name VARCHAR(64) NOT NULL, 

    ...> team_id INTEGER, 

    ...> FOREIGN KEY(team_id) REFERENCES nl_central_teams(id), 

    ...> created_at DATETIME NOT NULL, 

    ...> updated_at DATETIME NOT NULL 

    ...>); 

오류 : 근처 "created_at": 구문 오류 내 구문 같은 느낌

가 정확하지만이 오류가있는 이유 알아낼 수 없습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

이 MySQL의 또는 SQLite는인가? – tadman

답변

2

외래 키 제약 조건은 CREATE TABLE 정의의 끝에 있어야합니다.

귀하의 관리자는 TABLE 문은 다음과 같이한다 CREATE :

CREATE TABLE managers(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    first_name VARCHAR(64) NOT NULL, 
    last_name VARCHAR(64) NOT NULL, 
    team_id INTEGER, 
    created_at DATETIME NOT NULL, 
    updated_at DATETIME NOT NULL, 
    FOREIGN KEY(team_id) REFERENCES nl_central_teams(id) 
); 

여기를 참조하십시오 :

FOREIGN KEY(team_id) REFERENCES nl_central_teams(id),

: http://sqlfiddle.com/#!7/f3f38/1/0

0

문제 라인은 실제로 오류 심판 위의 하나입니다 SQLite의 외래 키 지원은 약간 까다 롭습니다. 다음 이유 중 하나로 인해 작동하지 않을 수 있습니다.

  1. 외래 키 지원이 도입 된 버전은 3.6.9 이전입니다.
  2. 당신은 3.6.9 이상이지만 특정 설치가 외래 키를 지원하지 않고 컴파일되었으므로 가능합니다. 당신은 그 외국 키 지원을 지원하는 설치해야하지만이 활성화되지 않은

    In order to use foreign key constraints in SQLite, the library must be compiled with neither SQLITE_OMIT_FOREIGN_KEY or SQLITE_OMIT_TRIGGER defined. If SQLITE_OMIT_TRIGGER is defined but SQLITE_OMIT_FOREIGN_KEY is not, then SQLite behaves as it did prior to version 3.6.19 - foreign key definitions are parsed and may be queried using PRAGMA foreign_key_list, but foreign key constraints are not enforced.

  3. (http://www.sqlite.org/foreignkeys.html#fk_enable 참조). (http://www.sqlite.org/faq.html#q22를 참조하십시오.)

    As of version 3.6.19, SQLite supports foreign key constraints. But enforcement of foreign key constraints is turned off by default (for backwards compatibility). To enable foreign key constraint enforcement, run PRAGMA foreign_keys=ON or compile with -DSQLITE_DEFAULT_FOREIGN_KEYS=1.

+1

이 세 가지 이유는이 특별한 질문에 맞지 않습니다. Donal가 올바른 답을 얻습니다. –

관련 문제