创建含外键的orders表时触发语法错误,请求排查解决
外键创建失败:orders表语法错误排查与解决
已成功创建customers和employees表,SQL语句如下:
已创建的customers表
CREATE TABLE customers ( customer_id INTEGER PRIMARY KEY AUTOINCREMENT, customer_name VARCHAR(50), contact_info VARCHAR(50));
已创建的employees表
CREATE TABLE employees ( employee_id INTEGER PRIMARY KEY AUTOINCREMENT, employee_name VARCHAR(50), position VARCHAR(50), hire_date DATETIME);
尝试创建orders表时出现语法错误,报错信息:
Parse error: near "employee_id": syntax error
(customer_id) REFERENCES customers(customer_id), employee_id INTEGER, FOREIGN
错误原因
问题出在SQL语法结构上:你在列定义的中间插入了独立的FOREIGN KEY表级约束。SQLite要求,所有表级约束(不与列定义直接绑定的约束)必须放在所有列定义完成之后,不能穿插在列定义之间,否则解析器会无法正确识别语法结构。
解决方法
方法1:使用内联外键约束(推荐,更简洁)
将外键约束直接绑定到对应的列定义上,不需要单独写FOREIGN KEY子句:
CREATE TABLE orders ( order_id INTEGER PRIMARY KEY AUTOINCREMENT, customer_id INTEGER REFERENCES customers(customer_id), employee_id INTEGER REFERENCES employees(employee_id), order_date DATETIME);
方法2:将所有表级约束移到列定义之后
如果坚持使用表级约束写法,需要把所有FOREIGN KEY约束放在最后一列定义的后面:
CREATE TABLE orders ( order_id INTEGER PRIMARY KEY AUTOINCREMENT, customer_id INTEGER, employee_id INTEGER, order_date DATETIME, FOREIGN KEY (customer_id) REFERENCES customers(customer_id), FOREIGN KEY (employee_id) REFERENCES employees(employee_id));
以上两种写法都能正常创建包含外键的orders表。
内容的提问来源于stack exchange,提问作者ApathyErr
相关产品推荐
相关产品推荐

