我使用这个sql语句......
INSERT INTO users(id, email, phone, name )
VALUES ($id, $email, $phone, $name)
ON DUPLICATE KEY UPDATE email=VALUES(email), phone=VALUES(phone), name=VALUES(name)
它可以工作但是:有没有办法更新每一列而没有每列的VALUE = VALUES(列)?
答案 0 :(得分:2)
根据reference manual,明确列出每列是唯一的方法。
答案 1 :(得分:1)
如果列使用派生值(例如foo=concat("one","two")
),则不使用VALUES函数。否则,是的。它只是指最初传递的内容。
了解它here。
答案 2 :(得分:0)
不,我不这么认为。我们需要始终使用我们想要更新的值来指定列名。 像这样:
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name [(col_name,...)]
{VALUES | VALUE} ({expr | DEFAULT},...),(...),...
[ ON DUPLICATE KEY UPDATE
col_name=expr
[, col_name=expr] ... ]