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

标签 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";

我哪里出错了?

最佳答案

根据 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_cartPRIMARY 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/

相关文章:

java - 加载 JDBC-ODBC 驱动程序时出现异常

javascript - (MongoDB)问答网站的数据库结构

database - 如何在 Blackberry 应用程序中包含 SQLite 数据库?

database - 在Slick中,使用Table[T]需要什么导入?

sql - 在 SQL 中存储排序顺序的最佳方法是什么?

mysql - 如何在删除另一个数据库时更新另一个数据库中列字符串的值

mysql - 无法在 mysql 查询中获得左外连接结果

mysql - 我们如何使用 Sequelize 执行以下原始查询?

mysql - 更新多列可能重复的记录

sql - 连接表时删除重复项