首页 > 解决方案 > DUPLICATE KEY UPDATE 只能工作一次?

问题描述

我正在尝试创建一个计数器,每次发送电子邮件时都会增加一个。我的 DUPLICATE KEY UPDATE 语句只工作一次。在发送的字段更新为值 2 后,多次运行查询不会进行更新。我不确定为什么?我希望能够根据需要多次更新已发送的字段。

INSERT INTO remind_sync(studentid, sent)
VALUES(8, 1)
ON DUPLICATE KEY
UPDATE
    sent =
VALUES(sent) +1


CREATE TABLE `remind_sync` (
  `id` int(11) NOT NULL,
  `studentid` int(11) NOT NULL,
  `sent` smallint(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


ALTER TABLE `remind_sync`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `studentid` (`studentid`);


ALTER TABLE `remind_sync`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;

标签: mysqlsqlinsert-update

解决方案


在发送的字段更新为值 2 后,多次运行查询不会进行更新。

每次使用sent值运行插入时1,都会得到1+12sent = sent+ values(sent)将继续包含 的当前值sent,从而根据需要递增。

当我们在做的时候,

ALTER TABLE `remind_sync`
  ADD PRIMARY KEY (`id`),
  ADD UNIQUE KEY `studentid` (`studentid`);


ALTER TABLE `remind_sync`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
COMMIT;

为什么不只是这个?

CREATE TABLE `remind_sync` (
    `id` BIGINT AUTO_INCREMENT PRIMARY KEY,
    ...
)

推荐阅读