我无法将外键添加到现有表。|sqlite3

  • 本文关键字:sqlite3 添加 sqlite cs50
  • 更新时间 :
  • 英文 :


所以我正在努力完成财务。下面是.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/

最新更新