Swift中用sqlite3创建带外键的表时出现语法错误怎么办
问题解决方法
1. 修正SQL语句的语法错误
你遇到的near "date": syntax error是因为外键约束的位置错误。SQLite中,表级外键约束必须放在所有列定义的最后,不能插在列定义中间。
修正后的measurement表创建语句如下:
CREATE TABLE IF NOT EXISTS measurement( measurementid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, accountid INTEGER NOT NULL, date TEXT NOT NULL, measurementtype TEXT NOT NULL, moodmeasurementid INTEGER, healthmeasurementid INTEGER, bodymeasurementid INTEGER, workout TEXT NOT NULL, FOREIGN KEY(accountid) REFERENCES accounts(userid) );
注意:
- 把外键约束移到了所有列定义的最后
- 最后一列
workout后面保留逗号,用于分隔列定义和表级约束 - 外键约束语句末尾不需要加逗号
2. 确保创建表的顺序正确
必须先创建accounts表,再创建measurement表——因为measurement依赖accounts的主键。如果创建顺序颠倒,会导致外键引用失败。
3. 确认外键启用代码有效
你的外键启用代码是正确的,但要确保这段代码在打开数据库连接之后、创建表之前执行。如果执行时没有输出错误日志,说明外键已经成功启用。
内容的提问来源于stack exchange,提问作者Xa4
相关产品推荐
相关产品推荐

