You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL非主键字段实现INSERT或UPDATE(避免双查询)

解决方案

要实现基于非主键字段Ticker的批量插入或更新(不影响自增字段),核心是利用INSERT ... ON DUPLICATE KEY UPDATE的特性——它不仅对主键冲突生效,唯一键冲突同样会触发更新逻辑,具体步骤如下:

1. 给Ticker字段添加唯一约束

首先需要确保Ticker字段是唯一的,这样MySQL才能识别重复数据并触发更新。执行以下SQL语句添加唯一索引:

ALTER TABLE `param_forex` ADD UNIQUE INDEX idx_ticker (`Ticker`);

注意:如果表中已有重复的Ticker值,这条语句会执行失败,需要先清理重复数据后再操作。

2. 修改批量插入语句,加入更新逻辑

将原有的executemany语句修改为包含ON DUPLICATE KEY UPDATE的版本,当Ticker重复时自动更新Price字段:

mycursor.executemany(
    f"INSERT INTO `param_forex` (Ticker, Price) VALUES (%(symbol)s, %(price)s) "
    "ON DUPLICATE KEY UPDATE Price = VALUES(Price)",
    forex
)
  • VALUES(Price)表示引用当前插入语句中Price列对应的值(即传入字典里的price);
  • 这种方式不会删除原有行,仅更新指定字段,完全不会影响表中的自增主键。

效果验证

对于你提供的forex数据:

  • 如果某个symbol对应的Ticker在表中不存在,会执行插入操作;
  • 如果Ticker已存在,则会用新的price覆盖原有Price值,自增字段保持不变。

内容的提问来源于stack exchange,提问作者Mat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:27:04