所以我正在努力完成财务。下面是.schema:
sqlite> .schema
CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, username TEXT NOT NULL, hash TEXT NOT NULL, cash NUMERIC NOT NULL DEFAULT 10000.00);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE history(
symbol TEXT, name TEXT, shares INTEGER, price NUMERIC, time DATETIME
);
CREATE UNIQUE INDEX username ON users (username);
当我尝试添加外键到history
表时,它总是返回错误。下面是我的代码:
sqlite> ALTER TABLE history ADD COLUMN id INT;
sqlite> ALTER TABLE history ADD FOREIGN KEY(id) REFRENCES users(id);
Parse error: near "FOREIGN": syntax error
ALTER TABLE history ADD FOREIGN KEY(id) REFRENCES users(id);
^--- error here
我认为根据我在sqlite文档中看到的语句应该与ADD列在一起:
ALTER TABLE history ADD COLUMN id INTEGER REFERENCES users(id);
但是请检查一下我的语法!另一种选择是在创建表的同时创建约束。
CREATE TABLE history(
symbol TEXT,
name TEXT,
shares INTEGER,
price NUMERIC,
time DATETIME,
id INTEGER,
FOREIGN KEY (id)
REFERENCES users (id));
你可能还没有意识到这一点,但是每个数据库都有自己独特的SQL风格,所以尽管有一个SQL标准,但对于特定的数据库实现,SQL的语法通常会有很小的差异。因此,在为sql数据库查找命令时,您必须始终注意这一点。
关于Sqlite外键约束的更多细节可以在这里找到:https://www.sqlitetutorial.net/sqlite-foreign-key/