这个问题在这里已经有答案了:
插入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')
现在我有一个重复的詹姆斯的行,当他们是同一个人。你实际上应该如何插入/更新数据?
1条答案
按热度按时间f87krz0w1#
考虑以下几点:
这将确保一次只插入一行,并且在找到另一个条目时不会插入,无论进程1是先插入的还是进程2先插入的。