我一直在阅读如何使用MySQL在重复键上插入,看看它是否允许我避免选择一行,检查它是否存在,然后插入或更新。然而,当我阅读文档时,有一个地方让我感到困惑。文档是这样说的:
如果指定 ON DUPLICATE KEY UPDATE,并且插入的行会导致 UNIQUE 索引或 PRIMARY KEY 中出现重复值,则会执行旧行的 UPDATE
问题是,我不想知道这是否适用于我的问题,因为我不插入新值的“条件”是存在两列等于某个值的行,但不一定主键是相同的。现在我想象的语法是这样的,但我不知道它是否总是插入而不是替换:
INSERT INTO attendance (event_id, user_id, status) VALUES(some_event_number, some_user_id, some_status) ON DUPLICATE KEY UPDATE status=1
问题是,event_id 和 user_id 不是主键,但如果“出勤”表中的一行已经包含具有这些值的列,我只想更新它。否则我想插入它。这对于 ON DUPLICATE 来说是可能的吗?如果没有,我还可以使用什么其他方法?
引用包括“UNIQUE 索引中的重复值”。因此,您的值不需要是主键:
create unique index attendance_eventid_userid on attendance(event_id, user_id);
据推测,您想要更新现有记录,因为您不希望出现重复项。如果您有时需要重复项,但不是针对此特定插入,那么您将需要另一种方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)