2014-09-04 105 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 2014-09-04 17:13:54

回答

2

外鍵約束應該在CREATE TABLE定義的末尾。

你的經理CREATE TABLE語句應該是這樣的:

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) 
); 

在這裏看到:http://sqlfiddle.com/#!7/f3f38/1/0

0

問題行實際上是你的錯誤裁判上面的一個:

FOREIGN KEY(team_id) REFERENCES nl_central_teams(id),

SQLite中的外鍵支持有點棘手。由於以下原因之一可能不起作用:

  1. 當引入外鍵支持時,您的版本早於3.6.9。
  2. 你是在3.6.9或更高版本,但你的特定安裝是編譯時沒有外鍵支持,這是可能的。 (見http://www.sqlite.org/foreignkeys.html#fk_enable

    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/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

所有這三個原因都不適合這個特定的問題。唐納得到正確的答案。 – 2014-09-04 17:16:40