我有一个名为scanHistory的表,它将scanID和HostID保存为外键,它们实际上是各自表的主键。我想在SQLite中编写一个插入查询,以避免将scanID的相同值插入到其各自的HostID中,这意味着没有两个相同的主机可以具有相同的scanID,如:
ScanID - 100 HostID - 1
ScanID - 100 HostID - 2
ScanID - 200 HostID - 1
我试过了这个查询
INSERT INTO scanHistory (NULL,4000,1) Select 1 WHERE NOT EXISTS (SELECT 1 from scanHistory);
但它给了我错误陈述
Error: near "NULL": Syntax Error
我做错了什么?该表看起来像这样
CREATE TABLE scanHistory(
ScanHistoryID INTEGER PRIMARY KEY AUTOINCREMENT,
HostID INTEGER REFERENCES host(HostID),
ScanID INTEGER REFERENCES scan(ScanID));
答案 0 :(得分:0)
让数据库强制执行它怎么样?
CREATE UNIQUE INDEX ix_scan_host ON ScanHistory(ScanID, HostID);
现在您无法再插入重复的HostID / ScanID对。
如果您只是意味着ScanID
必须是唯一的,那么您可以在其上创建唯一索引,并且数据库将强制执行不能插入具有相同ScanID
的两行; < / p>
CREATE UNIQUE INDEX ix_scan_host ON ScanHistory(ScanID);
如果您在尝试插入值时想要返回错误,请像往常一样使用INSERT INTO...
。如果您想忽略该错误,请使用INSERT OR IGNORE INTO...
。
编辑:要仅使用SQL,您可以使用;
INSERT INTO ScanHistory (ScanID, HostID) SELECT 100, 1
WHERE NOT EXISTS (
SELECT 1 FROM ScanHistory WHERE ScanID=100 AND HostID=1
);