2014-09-30 4 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)' - попробуйте с '(' и ')'. –

+0

находится на sqlite3 – xeroshogun

+0

@ PM77-1 имеет ответ. Возможно, они должны добавить это как таковое. – paqogomez

ответ

0

SQLite Docs, кажется, указывают, что имя столбца (ы) в FOREIGN Key ограничения должны быть в круглых скобках:

table constrint diagram

Я не уверен, насколько строго это на самом деле жизнь. Мой SQL Fiddle показывает, что использование круглых скобок должно решить вашу проблему.

Пожалуйста, обратите внимание, что SQL Fiddle для SQLite является эмулировать, поэтому ваш результат все еще может меняться.

+0

Почему вы не знаете, как строго это соблюдается? Весь этот вопрос касается строгого соблюдения. И sqlite.js - это прямой перевод C-to-JavaScript. –

+0

@CL - Я запустил его на 'WebSQL'. Моя точка зрения заключалась в том, что использование правильного синтаксиса никогда не повредит, хотя * иногда * вы * можете * уйти с меньшим количеством. –

+0

WebSQL использует собственную библиотеку SQLite в браузере. –

Смежные вопросы