gpt4 book ai didi

mysql - 在插入时使用 MySQL 检查两列的重复项,但两列都不是唯一的

转载 作者:行者123 更新时间:2023-11-29 14:31:04 24 4
gpt4 key购买 nike

这个问题在这里:

MySQL: INSERT IGNORE or ON DUPLICATE KEY UPDATE with checking multiple and not unique columns

很相似,但又不完全一样。

我正在尝试使用如下表格构建观察列表:

    recordId    |    itemId   |   userId    |    dateAdded

recordId 是唯一唯一列,并且是一个自动增量 ID 字段。

itemId、userId 和 dateAdded 可以单独复制,但不能全部复制。

因此,如果用户已经将一个项目添加到他/她的监视列表中,我希望它只更新添加日期。

因此,行可能多次包含相同的 userId(因为用户可能希望“观看”多个项目),并且可能多次包含 itemId(因为同一项目可能被许多用户“观看”),但组合与已存在的记录匹配的 userId 和 itemId 应该会导致更新。

是否有一个单一的语句方法可以做到这一点,或者我是否需要在尝试插入之前询问数据库是否userId =&postingUser&和itemId =&requestedId&

最佳答案

具体操作方法如下:

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;

这是如何工作的:

  • 当您尝试插入一行时,MySQL 将检查键冲突
  • 由于您已为 (itemId, userId) 组合创建了唯一键,因此系统将对此进行检查
  • 如果没有冲突,MySQL 将继续插入该行
  • 如果存在冲突,MySQL 将回退到 onlicate key 子句,该子句会更新 dateAdded 列的值

关于mysql - 在插入时使用 MySQL 检查两列的重复项,但两列都不是唯一的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10031224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com