我有一个类似于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列的组合成为唯一?
谢谢:)
答案 0 :(得分:1)
如果唯一键是userid / month,则将这两者用于唯一索引或约束:
create index unq_users_last_updated_2 on users_last_updated(userId, month);
我想补充一点,month
没有year
似乎很奇怪。
on duplicate key
使用任何和所有可用的唯一索引,包括主键(但不仅限于主键)。