Sqlite插入或替换vs主键
使用sqlite 我需要插入整个记录。如果该记录已存在,则应忽略该记录 如果我使用下面的命令,通知“id_key”编号,它将按预期工作: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”字段值的情况下重现此行为,该字段是自动递增的。如果我像这样
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为什么?