【问题标题】:SQL Update, if not exist then insertSQL 更新,如果不存在则插入
【发布时间】:2014-11-08 01:52:11
【问题描述】:

表格布局:

CREATE TABLE gmod_playerdata (
  dataset_id  int(255) NULL AUTO_INCREMENT,
  data_id int(255) NULL,
  option_name  varchar(100) NULL,
  option_value  varchar(100) NULL,
  PRIMARY KEY (dataset_id)
)

我不知道该行是否已经存在。 data_id 将始终被填充,但可以/将出现多次。

我只需要更新 option_name 和 option_value,而我在运行查询时不知道 option_value 和 option_name 是否已经存在。

我已经阅读了很多关于 ON DUPLICATE KEY UPDATE 的内容,但是我有点不明白它在我的场景中的用途。

【问题讨论】:

  • option_value 和 option_name 一起是唯一的吗?

标签: mysql insert duplicates


【解决方案1】:

假设option_valueoption_name 的组合是唯一的...

要使on duplicate key update 工作,必须有一个唯一索引(或主键),所以:

create unique index myidx on gmod_playerdata(option_value, option_name);

创建索引后,此查询将起作用:

insert into gmod_playerdata values (...)
on duplicate key update data_id = values(data_id)

我假设data_id 是唯一的其他真实列,因此您想要更新它而不是插入一行。如果这不是您想要的,请按照语法调整查询。

【讨论】:

  • 谢谢!你为我指明了正确的方向。我现在正在使用“UNIQUE KEY attribute (data_id,option_name) USING BTREE”,这样我也可以使用 ON DUPLICATE Key。
猜你喜欢
  • 1970-01-01
  • 2014-10-23
  • 2018-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 2015-08-14
相关资源
最近更新 更多