检查用户ID是否存在于表中,然后在mysql版本5.7.15中更新else插入

时间:2017-02-20 17:21:33

标签: mysql database

所以我想实现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";

我哪里错了?

1 个答案:

答案 0 :(得分:1)

根据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必须定义为PRIMARY KEY的{​​{1}}。您可能需要执行以下操作:

sys_cart

顺便说一句,你应该考虑使用子表来表示产品ID,而不是将CSV填充到单个字段中,以后很难处理。