Sqlite插入或替换vs主键

Sqlite插入或替换vs主键,sqlite,replace,insert,primary-key,Sqlite,Replace,Insert,Primary Key,使用sqlite 我需要插入整个记录。如果该记录已存在,则应忽略该记录 如果我使用下面的命令,通知“id_key”编号,它将按预期工作: INSERT OR REPLACE INTO contatos ('id_key', 'VERSION', 'FN', 'N', 'EMAIL') VALUES (209, '2.1', 'bla bla', 'bla;bla;;;', 'bla@x.com'); 但是,如何在不通知“id_key”字段值的情况下重现此行为,该字段是自动递增的。如果我像这样

使用sqlite

我需要插入整个记录。如果该记录已存在,则应忽略该记录

如果我使用下面的命令,通知“id_key”编号,它将按预期工作:

INSERT OR REPLACE INTO contatos ('id_key', 'VERSION', 'FN', 'N', 'EMAIL') 
VALUES (209, '2.1', 'bla bla', 'bla;bla;;;', 'bla@x.com');
但是,如何在不通知“id_key”字段值的情况下重现此行为,该字段是自动递增的。如果我像这样使用代码,它会重复数据(如果数据已经存在):

INSERT OR REPLACE INTO contatos ('id_key', 'VERSION', 'FN', 'N', 'EMAIL') 
VALUES (NULL, '2.1', 'bla bla', 'bla;bla;;;', 'bla@x.com');
我的桌子:

CREATE TABLE "contatos" (
    "id_key"    INTEGER NOT NULL,
    "VERSION"   TEXT,
    "FN"    TEXT,
    "N" TEXT,
    "EMAIL" TEXT,
    "TEL;WORK"  TEXT,
    "TEL;HOME"  TEXT,
    "TEL;CELL"  TEXT,
    "PHOTO;ENCODING=BASE64;JPEG"    TEXT,
    "EMAIL;HOME"    TEXT,
    "ADR;HOME"  TEXT,
    "TEL;VOICE" TEXT,
    "TEL;PREF"  TEXT,
    "TEL;X-Celular" TEXT,
    "EMAIL;PREF"    TEXT,
    "TEL;X-Antigo"  TEXT,
    "ORG"   TEXT,
    "TEL;X-WhatsApp"    TEXT,
    PRIMARY KEY("id_key" AUTOINCREMENT)
);

您似乎希望
VERSION
FN
N
EMAIL
列的组合是唯一的。
为此,在表的定义中需要一个
UNIQUE
约束:

CREATE TABLE "contatos" (
    "id_key"    INTEGER NOT NULL,
    "VERSION"   TEXT,
    "FN"    TEXT,
    "N" TEXT,
    "EMAIL" TEXT,
    "TEL;WORK"  TEXT,
    "TEL;HOME"  TEXT,
    "TEL;CELL"  TEXT,
    "PHOTO;ENCODING=BASE64;JPEG"    TEXT,
    "EMAIL;HOME"    TEXT,
    "ADR;HOME"  TEXT,
    "TEL;VOICE" TEXT,
    "TEL;PREF"  TEXT,
    "TEL;X-Celular" TEXT,
    "EMAIL;PREF"    TEXT,
    "TEL;X-Antigo"  TEXT,
    "ORG"   TEXT,
    "TEL;X-WhatsApp"    TEXT,
    PRIMARY KEY("id_key" AUTOINCREMENT),
    UNIQUE(VERSION, FN, N, EMAIL)
);
然后使用
INSERT或IGNORE
插入新行,而不使用
id\u键

INSERT OR IGNORE INTO contatos (VERSION, FN, N, EMAIL) 
VALUES ('2.1', 'bla bla', 'bla;bla;;;', 'bla@x.com');
插入或替换
,如果要删除具有相同4列组合的现有行并插入新列:

INSERT OR REPLACE INTO contatos (VERSION, FN, N, EMAIL) 
VALUES ('2.1', 'bla bla', 'bla;bla;;;', 'bla@x.com');

请参阅。

这不可能,不可能使用Unique。@Leonardoxxx为什么?