我们应该选择,然后插入/更新吗?确保没有重复行的正确方法是什么

vhmi4jdf  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(324)

这个问题在这里已经有答案了

插入mysql表或更新(如果存在)(11个答案)
防止重复的sql条目(3个答案)
10个月前关门了。
数据库: c_id, name ( c_id 是主键)
上下文(为使问题有意义而编造的上下文):
在这种情况下,我们可以假设没有人有相同的 name . 我有一家旅馆,一个顾客走进来。她的名字是 Madi Smith (结婚前,她的名字是 Madi Andrews ). 我不知道这是不是新客户。然后,我做我的过程:
第一 find_customer(name) 返回主键或 FALSE 如果没有找到。
如果我收到一个主键,那么我总是 update_customer(c_id, name) 否则如果找不到客户 insert_customer(name) .
然而,当我这样想的时候,我的假设问题就出现了。
工艺1 | James 走进来
工艺1 | find_customer('james') ->退货 FALSE 工艺2 | James 走进来(同上)
工艺2 | find_customer('james') ->退货 FALSE 工艺1 | insert_customer('james') 工艺2 | insert_customer('james') 现在我有一个重复的詹姆斯的行,当他们是同一个人。你实际上应该如何插入/更新数据?

f87krz0w

f87krz0w1#

考虑以下几点:

INSERT INTO <TABLE> ("james")
        SELECT "james"
  WHERE NOT EXISTS (SELECT * FROM <TABLE> WHERE name = "james" )

这将确保一次只插入一行,并且在找到另一个条目时不会插入,无论进程1是先插入的还是进程2先插入的。

相关问题