更新包含两列的重复键以检查 mysql

Update on Duplicate key with two columns to check mysql

我正在努力理解 'On Duplicate Key' mysql 声明。我有以下 table: id (primary key autoincr) / server id (INT) / member id (INT UNIQUE KEY) / basket (VARCHAR) / shop (VARCHAR UNIQUE KEY)

在此 table 中,每个成员可以有两行,每个商店(shopA 和 shopB)各一行。如果会员 ID 和商店都不匹配,我想插入。如果有匹配项,我希望它更新篮子以将当前篮子与其他信息连接起来。

我正在尝试使用: "INSERT INTO table_name (server_id, member_id, basket, shop) VALUES (%s, %s, %s, %s) ON DUPLICATE KEY UPDATE basket = CONCAT (basket,%s)"

目前,如果 shopA 的成员有一个条目,当它与 shopB 的购物车一起运行时,它会将购物车信息添加到 shopA 行,而不是创建一个新行。

希望这一切都有意义!提前致谢!

更新:这里要求的是 create table sql 语句: CREATE TABLE table_name ( member_id bigint(20) NOT NULL, server_id bigint(11) NOT NULL, basket varchar(10000) NOT NULL, shop varchar(30) NOT NULL, notes varchar(1000) DEFAULT NULL, PRIMARY KEY (member_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

In this table each member can have two rows, one for each of the shops (shopA and shopB)

这意味着 member_id 应该 而不是 作为 table 的主键,因为它不是唯一的。
您需要 member_idshop 列的复合主键:

CREATE TABLE table_name ( 
  member_id bigint(20) NOT NULL, 
  server_id bigint(11) NOT NULL, 
  basket varchar(10000) NOT NULL, 
  shop varchar(30) NOT NULL, 
  notes varchar(1000) DEFAULT NULL, 
  PRIMARY KEY (member_id, shop) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

查看简化版 demo.