这个 SQL 语句有什么问题(对于 SQLITE):
CREATE TABLE IF NOT EXISTS "history"
(
"inscode" INTEGER NOT NULL,
"yyyyymmdd" INTEGER NOT NULL,
"basic_data" INTEGER NOT NULL,
"instrument_state" INTEGER NOT NULL,
"static_thresholds" INTEGER NOT NULL,
"trades" INTEGER NOT NULL,
"closing_price" INTEGER NOT NULL,
"best_limits" INTEGER NOT NULL,
"client_type" INTEGER NOT NULL,
"shareholders" INTEGER NOT NULL,
PRIMARY KEY("inscode", "yyyymmdd")
) WITHOUT ROWID
我收到此错误消息:
执行完成,但有错误。
结果:PRIMARY KEY 和 UNIQUE 约束中禁止表达式
这是由于 sqlite3 中 quirk 8 的不幸交互以及列定义中存在拼写错误造成的:
"yyyyymmdd"
;请注意,有五个“y”,而不是四个。这是一个错字。由于
PRIMARY KEY
子句引用 "yyyymmdd"
(四个“y”),但列定义是 "yyyyymmdd"
(五个“y”),因此上面提到的怪癖开始出现,"yyyyymmdd"
被解释为字符串文字,这就是 sqlite3 抱怨的“主键中的表达式”。