2014-09-30 40 views
0

我想在sqlite3中創建一堆表,並且出現一個我無法修復的錯誤。對於用於外鍵的sqlite3的語法有些問題,但無法弄清楚。嘗試創建外鍵的SQLite3語法錯誤

CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT, 
first_name VARCHAR(64), 
last_name VARCHAR(64) 
); 


CREATE TABLE classes (
id INTEGER PRIMARY KEY AUTOINCREMENT, 
class_name VARCHAR(64) 
); 



CREATE TABLE students_classes (
id INTEGER PRIMARY KEY AUTOINCREMENT, 
students_id INTEGER, 
classes_id INTEGER, 
FOREIGN KEY (students_id) REFERENCES students(id), 
FOREIGN KEY (classes_id) REFERENCES classes(id) 
); 



CREATE TABLE teachers (
id INTEGER PRIMARY KEY AUTOINCREMENT, 
classes_id INTEGER, 
first_name VARCHAR(64), 
last_name VARCHAR(64), 
FOREIGN KEY classes_id REFERENCES classes(id) 
); 


CREATE TABLE grades (
id INTEGER PRIMARY KEY AUTOINCREMENT, 
students_id INTEGER, 
grade_num INTEGER, 
FOREIGN KEY students_id REFERENCES students(id) 
); 


Error: near "students_id": syntax error 
+1

'FOREIGN KEY(students_id)' - 用'('和')'嘗試。 – 2014-09-30 16:27:27

+0

它在sqlite3上 – xeroshogun 2014-09-30 16:33:17

+0

@ PM77-1有答案。也許他們應該像這樣添加它。 – paqogomez 2014-09-30 16:39:39

回答

0

SQLite Docs似乎表明FOREIGN Key約束列姓名(或名稱)必須在括號內:

table constrint diagram

我不知道它是如何嚴格執行實際。我的SQL Fiddle顯示使用括號可以解決您的問題。

請注意,SQL FiddleSQLite仿真,所以你的結果仍可能會有所不同。

+0

爲什麼你不確定它的執行有多嚴格?這整個問題都是關於嚴格執法的。而sqlite.js是一個直接的C到JavaScript的翻譯。 – 2014-09-30 17:26:06

+0

@CL - 我在'WebSQL'上運行它。我的觀點是 - 使用適當的語法永遠不會受到傷害,儘管*有時*你*可能會少一些。 – 2014-09-30 17:29:08

+0

WebSQL在瀏覽器中使用本地SQLite庫。 – 2014-09-30 17:32:28