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

时间:2017-11-30 16:57:49

标签: mysql

我正在尝试编写一个替换而不是更新的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或登录来改变某些值

1 个答案:

答案 0 :(得分: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