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