所以我想实现一个 UPSERT 查询。我不想查询并首先检查用户是否存在,然后插入,而是我想在插入期间检查并更新字段如果用户存在。我已经尝试了所有这些查询,但没有任何效果。
INSERT INTO `sys_cart` (`userid`, `product_ids`, `date_added`, `date_updated`, `date_deleted`)
VALUES (2 ,`3,4`, `2017-02-01 00:00:00`, `2017-02-01 00:00:00`, null)
ON DUPLICATE `sys_cart.userid` UPDATE `product_ids` = '12,13';
INSERT INTO 'sys_cart'
VALUES (4, '34,12', '2017-02-01 00:00:00', '2017-02-01 00:00:00', null)
ON DUPLICATE userid UPDATE product_ids = VALUES('3,4');
INSERT INTO 'sys_cart'
VALUES (4, 'Gorilla', '2017-02-01 00:00:00', '2017-02-01 00:00:00', null)
ON DUPLICATE userid UPDATE product_ids;
INSERT INTO 'sys_cart'
VALUES (4, 'Gorilla', '2017-02-01 00:00:00', '2017-02-01 00:00:00', null)
ON DUPLICATE userid UPDATE product_ids = VALUES('3,4');
INSERT INTO sys_cart (userid, product_ids, date_added, date_updated, date_deleted)
VALUES (4, "Gorilla", "2017-02-01 00:00:00", "2017-02-01 00:00:00", null)
ON DUPLICATE userid UPDATE product_ids = VALUES("3,4");
INSERT INTO sys_cart (userid, product_ids, date_added, date_updated, date_deleted)
VALUES (4, "Gorilla", "2017-02-01 00:00:00", "2017-02-01 00:00:00", null)
ON DUPLICATE userid UPDATE product_ids = "3,4";
我哪里出错了?
最佳答案
根据 documentation ,语法是ON DUPLICATE KEY
,字面意思。您无法指定哪个列是查询中的键 - 这是在表级别定义的。
你的语法应该是:
INSERT INTO sys_cart
VALUES (4, '34,12', '2017-02-01 00:00:00', '2017-02-01 00:00:00', null)
ON DUPLICATE KEY UPDATE product_ids = VALUES(product_ids)
您可能还缺少的是,userid
必须定义为 sys_cart
的 PRIMARY KEY
。您可能需要执行以下操作:
ALTER TABLE sys_cart
MODIFY COLUMN userid INT PRIMARY KEY
<小时/>
顺便说一句,您应该考虑使用子表来存储产品 ID,而不是将 CSV 填充到单个字段中,这样以后会很难处理。
关于mysql - 检查表中是否存在用户 ID,然后更新,否则插入 mysql 版本 5.7.15,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42350705/