我的sqlite命令有问题。 我有一个包含三列的表:Id,user,number。 身份证正在继续。现在,如果我将一个用户和一个数字放在我的列表中,我的应用程序应该比较是否已存在具有此数字的用户。问题是,如果我使用标准的“插入或忽略”命令,Id collumn不是固定的,所以每次都会得到一个新的条目。 那么如果它们相等,可能只有两个比较三列中的两列吗? 或者我是否必须使用临时列表,其中只有两列?
谢谢
答案 0 :(得分:0)
除非您指定密钥,否则不应使用insert或ignore,如果您的密钥是身份(自动编号),我认为永远不应该这样做。
根据用户和号码使您的表中的记录唯一,您不需要id列,您的主键应该是用户,号码。
如果由于某种原因你不想这样做,并且在这种情况下你要记住,用户,数字不是你的唯一性约束,那么
if not exists(Select 1 From MyTable Where user = 10 and Number = 15)
Insert MyTable(user,number) Values(10,15)
会做这个工作。不是一个SqlLite男孩,所以你可能不得不使用语法并包装转义列名。
答案 1 :(得分:0)
如果新记录违反UNIQUE约束,则INSERT或IGNORE语句将忽略该记录。 这样的约束是为PRIMARY KEY隐式创建的,但您也可以为任何其他列显式创建一个约束:
CREATE TABLE MyTable (
ID integer PRIMARY KEY,
User text,
Number number,
UNIQUE (User, Number)
);