mysql - 插入 MySQL 表或更新(如果存在但没有唯一键)

标签 mysql

我知道有一种方法可以使用唯一 key (例如 ID)来实现此结果,但正如您在下面看到的,在我的情况下,这不起作用,因为我没有唯一 key 。

INSERT INTO User_Status (User_ID1, User_ID2, Status) VALUES(?, ?, ?) ON DUPLICATE KEY UPDATE Status = ?

问题是我在这个表格上没有唯一的 ID,但是当前有 3 个选项。 1) 两个用户不具有同一种状态,换句话说:将其插入到表中。 2) 用户 1 与用户 2 具有一个状态(但是 1-2 组合是唯一的)。 3) 与情况 2 相同,但相反:用户 2 与用户 1 具有一个状态(同样,此组合是唯一的)。

如果此选项已经存在,是否还要更新?

示例数据:

User_ID1     User_ID2     Status
1            4            has_send_request
4            1            has_received_request
4            2            friends
2            4            friends    

假设我想将用户 1-4 的状态从 has_send_request 更新到 friend 。在这种情况下,我可以执行正常的 UPDATE 查询。但是,如果我想更新用户 2-4 的状态,我需要进行一个 INSERT 查询,而不是一个 UPDATE 查询。

最佳答案

请参阅附图,了解如何创建唯一 key 。

enter image description here

关于mysql - 插入 MySQL 表或更新(如果存在但没有唯一键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43306495/

相关文章:

mysql - RPG 任务 - 查询玩家数据

mysql - 仅将存储过程从 SQL Server 自动迁移到 mysql

php - 从数千个类别中获取文章

mysql - 我如何创建动态 json 数据来访问我的其余客户端

mysql - 如何在不指定表属性的情况下将值插入表中?

mysql - 获取 MySQL 中记录的每小时分割

mysql - #1025 - 重命名错误(errno : 150) in mysql

php - 按时间戳获取值以查找变化百分比。 mysql

php - 计算前后测试的改进百分比(MYSQL 和 PHP)

MySQL存储过程在过程结束之前返回结果