SQL“替换为”删除了我的一些行

问题描述 投票:0回答:1

我正在尝试编写一个替换而不是更新的SQL语句。

我桌子的列看起来像那样

(id
block
region
login
password
email
business
firstname
name
version
updatable
bodyshop_id
mac
register_date
lastvisite_date
enum_test
address1)

当我运行这样的声明时:

REPLACE INTO `users` (`login`, `firstname`, `region`, `address1`, `enum_test`, `block`, `id`) VALUES ('Samira GO', 'Samira', 'all', 'lmklm', '1', '0', '2')

Samira的身份证号码为2。 (替换目标;))

身份证号码为1的人员会被请求删除。

(表的主要id键是id + login + email)

(当我向SQL请求这个请求时它告诉我3行有影响)

如果你想问,id,登录或电子邮件是一些主要的价值,所以我不明白它如何能够用另一个id或登录更改某些值

mysql
1个回答
0
投票

来自the MySQL REPLACE doc

REPLACE语句返回一个计数以指示受影响的行数。这是删除和插入的行的总和。如果单行REPLACE的计数为1,则插入一行并且不删除任何行。如果计数大于1,则在插入新行之前删除一个或多个旧行。如果表包含多个唯一索引,并且新行为不同唯一索引中的不同旧行重复值,则单行可以替换多个旧行。

因此,听起来插入了一行并删除了两行。

检查表定义,看看是否有除PRIMARY KEY之外的任何UNIQUE索引。另请注意,虽然您说主键是id, login, email,但您的查询未指定email。如果存在两行匹配idlogin但具有不同的email,则它们可能都被删除了。

你也可以考虑你想要做的是an INSERT ... ON DUPLICATE KEY UPDATE而不是REPLACEREPLACE更像是一个组合的DELETE然后INSERT

© www.soinside.com 2019 - 2024. All rights reserved.