sqlite - Sqlite 插入或替换与主键
问题描述
使用 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 OR IGNORE
插入新行,而不使用id_key
:
INSERT OR IGNORE INTO contatos (VERSION, FN, N, EMAIL)
VALUES ('2.1', 'bla bla', 'bla;bla;;;', 'bla@x.com');
或者INSERT OR REPLACE
,如果您希望删除具有相同 4 列组合的现有行并插入新行:
INSERT OR REPLACE INTO contatos (VERSION, FN, N, EMAIL)
VALUES ('2.1', 'bla bla', 'bla;bla;;;', 'bla@x.com');
请参阅演示。
推荐阅读
- cassandra - Apache NiFi/Cassandra - PutCassandraRecord 无法转换为 Record 对象
- amazon-web-services - EC2 实例存储:定价和持久性
- javascript - TradingView JS API websocket 请求响应?
- python - 如何找到 2 个变量之间但跨越不同时间线的相关性(“滞后相关性”)
- java - 要求给定类型的所有字段都由某个字段注释进行注释
- python - 如何用每个条的总和(Matplotlib)注释堆积条形图?
- php - 如何将复选框选择传递给 php mailer 表单?
- algorithm - k = k + 1 是什么意思?有什么建议可以用解决方案对实际问题进行分类吗?
- google-bigquery - 如何使用 DDL 设置授权视图?
- c# - 使用 C# mongodb 驱动程序的 Mongodb 性能