pho*_*512 3 mysql sql sql-insert on-duplicate-key
我一直在阅读如何在重复键上使用 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
Run Code Online (Sandbox Code Playgroud)
问题是, event_id 和 user_id 不是主键,但是如果“出席”表中的一行已经包含具有这些值的那些列,我只想更新它。否则我想插入它。这甚至可以通过 ON DUPLICATE 实现吗?如果没有,我可以使用什么其他方法?
引用包括“UNIQUE 索引中的重复值”。因此,您的值不需要是主键:
create unique index attendance_eventid_userid on attendance(event_id, user_id);
Run Code Online (Sandbox Code Playgroud)
据推测,您想要更新现有记录,因为您不希望重复。如果您有时想要重复,但不是针对这个特定的插入,那么您将需要另一种方法。
如果我是你,我会用 event_id 和 user_id 创建主键。这将使这变得非常容易ON DUPLICATE。
create table attendance (
event_id int,
user_id int,
status varchar(100),
primary key(event_id, user_id)
);
Run Code Online (Sandbox Code Playgroud)
然后轻松地:
insert into attendance (event_id, user_id, status) values(some_event_number, some_user_id, some_status)
on duplicate key
update status = values(status);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13218 次 |
| 最近记录: |