更新包含两列的重复键以检查 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_id
和 shop
列的复合主键:
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.
我正在努力理解 '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_id
和 shop
列的复合主键:
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.