我正在使用SQLite 3.8.11 for Mac OS X app。 我的目标是创建一个表,然后在其他表中引用一些字段。 例如:
CREATE TABLE artist(
artistid INTEGER PRIMARY KEY,
artistname TEXT
);
CREATE TABLE track(
FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
但是,我想将 trackartist 插入 track ,以便每行包含唯一的 trackartist 价值。如果 trackartist 值已在轨道中,则必须忽略新值。 我怎么能在这个环境中做到这一点? UPDATE或IGNORE命令似乎不起作用,值重复。
答案 0 :(得分:4)
这是两个独立的问题:FOREIGN KEY
仅指定插入的值必须存在于另一个表中,但不指定它在此表中出现的次数。另一方面,UNIQUE
约束要求该值在此表中可能不会出现多次。
我不确定“艺术家 - 曲目”模型是否合理,但让我们想象一下,你真的想要指明一个艺术家不能拥有多个曲目。因此,您不仅要指定trackartist
引用artist(artistid)
,还要指定UNIQUE
:
CREATE TABLE track(
trackname TEXT,
trackartist INTEGER UNIQUE,
FOREIGN KEY(trackartist) REFERENCES artist(artistid)
);
答案 1 :(得分:0)
也许这会起作用?
INSERT OR REPLACE INTO track (trackartist) VALUES '123'
WHERE NOT EXISTS(SELECT 1 FROM track WHERE trackartist="123");
有关详细文档,请参阅here。
编辑: 正确的语法如下:
INSERT OR REPLACE INTO track (trackartist) SELECT '123' WHERE NOT EXISTS(SELECT 1 FROM track WHERE trackartist="123");