MySql Update第一个有X和Y的条目,否则插入新记录

时间:2011-09-22 15:55:15

标签: mysql database syntax insert sql-update

我在MySql表中有一个聊天用户条目 -

id(主键,自动增量) - 聊天用户ID
user_id - 与我们的产品相关的用户ID
room_id - 您所在房间的ID

如果聊天操作员进入房间,离开,然后回来 - 就像现在一样 - 将在房间内创建两个条目(INSERT INTO chatuser ...)

我知道INSERT IF NOT EXISTS语法,但是我想要不存在不在主键上,而是WHERE user_id = x AND room_id = y(如果他们重新进入他们所在的房间,那将是相同的)

类似INSERT INTO chatuser SET user_id = 4,room_id = 2如果进入已经存在这些值已经存在;)

谢谢

2 个答案:

答案 0 :(得分:0)

如果您在(user_id,room_id)上有唯一索引,则可以执行INSERT ... ON DUPLICATE KEY UPDATE(或INSERT IGNORE如果您不需要在记录已存在时更新任何内容:

INSERT INTO table_1 (user_id, room_id, enter_date)
VALUES  (1,1, NOW())
ON DUPLICATE KEY UPDATE
enter_date = NOW()

// or
INSERT IGNORE INTO table_1 (user_id, room_id)
VALUES (1,1)

答案 1 :(得分:0)

我认为我们这里有一个设计问题。您有3个表,一个用户表,一个房间表和一个链接这两个表的表。最后一个是我们在这里工作的。现在,如果您想在每次用户进入房间时进行记录,那么您拥有的桌面设计是理想的。然而,似乎这不是你在做什么。您似乎想要最后一次访问的条目。在这种情况下,您的表不应具有自动递增主键,而应将userID和roomID都作为多列主键的一部分。

将表修改为该设置,然后使用ON DUPLICATE KEY UPDATE子句运行insert语句。