带有2个唯一键的SQL ON DUPLICATE KEY?

时间:2017-03-27 09:09:29

标签: mysql sql

我有一个类似于MySQL的表:

+----+--------+-------+-------------+
| id | userID | month | lastUpdated |
+----+--------+-------+-------------+
|  1 |      5 |     1 | 2017-03-27  |
|  2 |      5 |     2 | 2017-03-22  |
|  3 |      5 |     3 | 2017-03-21  |
|  4 |      9 |     1 | 2017-03-27  |
|  5 |      9 |     2 | 2017-03-22  |
|  6 |      9 |     3 | 2017-03-21  |
+----+--------+-------+-------------+

我想对此表格发表INSERT语句,但请像这样使用ON DUPLICATE KEY UPDATE

INSERT INTO users_last_updated
(userID, month, lastUpdated)
VALUES
(:userID, :month, :lastUpdated)
ON DUPLICATE KEY UPDATE lastUpdated = :lastUpdated

问题是,userID可以多次显示,month值可以多次出现但是,每行的唯一性是userID&的组合。 month(例如:userID = 1& month = 3只能出现一次)。

有没有办法让2列的组合成为唯一?

谢谢:)

1 个答案:

答案 0 :(得分:1)

如果唯一键是userid / month,则将这两者用于唯一索引或约束:

create index unq_users_last_updated_2 on users_last_updated(userId, month);

我想补充一点,month没有year似乎很奇怪。

on duplicate key使用任何和所有可用的唯一索引,包括主键(但不仅限于主键)。