这个问题在这里:
MySQL: INSERT IGNORE or ON DUPLICATE KEY UPDATE with checking multiple and not unique columns
相似但不完全。
我正在尝试使用如下表格构建监视列表:
recordId | itemId | userId | dateAdded
recordId是唯一的unique
列,并且是自动增量ID字段。
itemId,userId和dateAdded可以单独复制,但不能完全复制。
因此,如果用户已经将项目添加到他/她的监视列表中,我希望它只是更新dateAdded。
因此,行可以多次包含相同的userId(因为用户可能希望观看多个项目)并且它可以多次包括itemId(因为同一项目可能被观看' #39;许多用户)但是userId和itemId的组合与已经存在的记录相匹配应该会导致更新。是否有一种语句方式可以执行此操作,或者在尝试插入之前是否需要询问数据库userId = & postingUser & and itemId = & requestedId &
?
答案 0 :(得分:1)
以下是您可以这样做的方法:
insert into <tablename> (itemId, userId)
values (?, ?)
on duplicate key update dateAdded = now();
在哪里?代表你要插入的新值
这假设您已为(itemId, userId)
:
CREATE TABLE <table> (
`recordId` int(11) NOT NULL AUTO_INCREMENT,
`itemId` int(11) DEFAULT NULL,
`userId` int(11) DEFAULT NULL,
`dateAdded` timestamp,
PRIMARY KEY (`recordId`),
UNIQUE KEY itemuser (`itemId`,`userId`)
) ENGINE=InnoDB;
这是如何运作的:
(itemId, userId)
的组合创建了一个唯一键,因此将会检查on duplicate key
子句,该子句更新dateAdded
列的值