我试图通过import sqlite3
使用swift/xCode中的默认sqlite3库创建一个包含外键的sqlite表。创建的表没有键,但如果我将外键添加到语句中,就会出现语法错误。
错误:[日志记录]靠近“日期”:语法错误
"""
CREATE TABLE IF NOT EXISTS measurement(
measurementid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
accountid INTEGER NOT NULL,
FOREIGN KEY(accountid) REFERENCES accounts(userid),
date TEXT NOT NULL,
measurementtype TEXT NOT NULL,
moodmeasurementid INTEGER,
healthmeasurementid INTEGER,
bodymeasurementid INTEGER,
workout TEXT NOT NULL
);
"""
"""
CREATE TABLE IF NOT EXISTS accounts(
userid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
email TEXT NOT NULL,
password TEXT NOT NULL,
firstname TEXT NOT NULL,
lastname TEXT NOT NULL,
birthday TEXT NOT NULL,
gender TEXT NOT NULL,
creationdate TEXT NOT NULL
);
"""
经过一些研究,我读到,你可能需要激活外键,在使用它们之前。所以我添加了下面的代码,但我仍然得到同样的错误。
if sqlite3_exec(dbPointer, "PRAGMA foreign_keys = ON", nil, nil, nil) != SQLITE_OK {
let err = String(cString: sqlite3_errmsg(dbPointer))
print("error attempting to enable foreign keys: \(err)")
}
另外,将它添加到语句的末尾也没有解决这个问题。
1条答案
按热度按时间a9wyjsp71#
您使用的是表约束语法,而不是列约束语法。
您需要:
如果要将约束条件添加到表中,则需要使用
FOREIGN KEY(accountid)
。还要注意删除了NOT NULL
后面的逗号。有关语法的完整详细信息,请参见https://www.sqlite.org/lang_createtable.html。