我正在尝试编写一个替换而不是更新的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或登录更改某些值
REPLACE语句返回一个计数以指示受影响的行数。这是删除和插入的行的总和。如果单行REPLACE的计数为1,则插入一行并且不删除任何行。如果计数大于1,则在插入新行之前删除一个或多个旧行。如果表包含多个唯一索引,并且新行为不同唯一索引中的不同旧行重复值,则单行可以替换多个旧行。
因此,听起来插入了一行并删除了两行。
检查表定义,看看是否有除PRIMARY KEY之外的任何UNIQUE索引。另请注意,虽然您说主键是id, login, email
,但您的查询未指定email
。如果存在两行匹配id
和login
但具有不同的email
,则它们可能都被删除了。
你也可以考虑你想要做的是an INSERT ... ON DUPLICATE KEY UPDATE
而不是REPLACE
。 REPLACE
更像是一个组合的DELETE
然后INSERT
。