【发布时间】:2019-07-18 12:20:34
【问题描述】:
我有一个这样的表结构:
- id(主要)bigint
- 属性(唯一)varchar(逗号分隔 数字)
- product_id bigint
- 价格文本
如果属性和产品 id 匹配,因此该行已经存在,那么我只想更新价格,否则,创建一个新行。
我有这段代码,它是循环的一部分,它将发送多个包含不同属性、产品 ID 和价格的 INSERT INTO 查询,现在它无法确定属性和产品 ID 是否匹配并且似乎只会更新属性列上的价格匹配:
INSERT INTO my_table (id,attributes,product_id,price) VALUES ('','61','4000','500') ON DUPLICATE KEY UPDATEprice= '500'
我尝试在属性和产品 id 列上定义唯一性,但是这样做时它会更新仅与属性匹配的现有行上的价格(当产品 id 不匹配时意味着价格被添加到错误的行)+ 未创建新行。
也许答案是不同的结构。我该怎么做?
【问题讨论】:
-
在
(attributes, product_id)上创建复合UNIQUE约束。在这种情况下,您还可以摆脱自动增量id。此外,当您为attributes列说“逗号分隔数字”时,它闻起来像是糟糕的设计。停止存储分隔符分隔的值;而是规范化数据库。阅读:Is storing a delimited list in a database column really that bad?