还没有大量使用 INSERT INTO ... ON DUPLICATE KEY UPDATE 查询,所以请引导我找到解决方案。
数据库表名为'tb_logs'
,有 4 列:
log_user_id, log_visitor_id, log_date, log_counter
我想插入数据,并且仅更新 log_date
和 log_counter
(如果行 log_user_id AND log_visitor_id
已存在并且具有完全相同的行)我要插入的值。
无论我尝试过什么,都无法使其正常工作,它会更新不应更新的行,或添加不应添加的新行。
我最近的代码:
$sql = "
INSERT INTO tb_logs (
log_user_id,
log_visitor_id,
log_date,
log_counter
) VALUES (
'{$user}',
'{$visitor}',
UNIX_TIMESTAMP(CURRENT_TIMESTAMP),
'1'
) ON DUPLICATE KEY UPDATE
log_user_id='{$user}',
log_visitor_id='{$visitor}',
log_date=UNIX_TIMESTAMP(CURRENT_TIMESTAMP),
log_counter=log_counter+1
";
也许我只是没有正确理解 ON DUPLICATE KEY UPDATE 查询?
示例:
log_user_id log_visitor_id log_date log_counter
--------------------------------------------------------
1 5 23434234 1
现在再次 log_user_id=1
AND log_visitor_id=5
时,不要插入新行,只需更新 log_date
和 log_counter
这可能吗?
最佳答案
是的,首先创建一个唯一索引。
ALTER TABLE `tb_logs`
ADD UNIQUE INDEX `user and visitor id` (`log_user_id`, `log_visitor_id`) USING BTREE;
然后按照您所做的那样构造您的查询;
INSERT INTO tb_logs (
log_user_id,
log_visitor_id,
log_date,
log_counter
)
VALUES
('{$user}',
'{$visitor}',
UNIX_TIMESTAMP(CURRENT_TIMESTAMP),
'1')
ON DUPLICATE KEY
UPDATE log_counter = log_counter + 1, log_date = UNIX_TIMESTAMP(CURRENT_TIMESTAMP)
关于mysql - 重复 key 更新 - 有条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31946674/