mysql 如果不存在,插入,还有更快的写法吗?

2021-09-17 15:34:08 +08:00
 wuwukai007
INSERT INTO table_listnames (name, address, tele)
SELECT * FROM (SELECT 'Unknown' AS name, 'Unknown' AS address, '022' AS tele) AS tmp
WHERE NOT EXISTS (
    SELECT name FROM table_listnames WHERE name = 'Rupert'
) LIMIT 1;

Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

目前大概 1000 条 700ms,这个 sql 返回值可以记录重复的数量

2988 次点击
所在节点    Python
10 条回复
deplivesb
2021-09-17 15:54:55 +08:00
如果根据主键判断存在 我一般用 ignore
aitaii
2021-09-17 15:56:19 +08:00
不存在,插入 = 存在,不插入 or 存在,更新列?
insert ignore into 或者 insert into on duplicate key update
eason1874
2021-09-17 16:01:13 +08:00
如果 name 是唯一的,可以用 INSERT IGNORE INTO
msg7086
2021-09-17 16:32:56 +08:00
唯一索引然后条件插入就行了。
wuwukai007
2021-09-17 16:55:03 +08:00
@aitaii @eason1874 INSERT IGNORE 会导致主键跳跃自增。条件不止一列,好几列,@msg7086 使用唯一索引久没发做逻辑删除了。
w7938940
2021-09-17 17:55:11 +08:00
quanqiubiannuan
2021-09-17 17:56:33 +08:00
replace into
dusu
2021-09-17 23:28:03 +08:00
要快 就做倒排~
byzf
2021-09-18 10:20:12 +08:00
ON DUPLICATE KEY UPDATE ?
lolizeppelin
2021-09-21 11:54:18 +08:00
这种都算邪道....

正常业务新增和更新本来就是分开的

正常业务流程情况下, 发现 update 更新行数不匹配时才 insert
出现大量 update 无匹配应该检查业务流程和代码而不是走捷径

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802550

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX