2012-03-16 115 views
4

我有一个3字段(所有数字)表字段CustID(不唯一),ProdID(不唯一)和价格。唯一的'唯一性'是没有CustID/ProdID对重复。所以,每个客户对每种产品都有不同的“价格”。我正在使用三行方法。 (a)搜索是否存在对,(b)如果是,则更新价格,(c)如果不存在,则用价格插入新对。我还没有创建id的索引(它可以用于开发目的)MySql更新字段或插入如果不存在,没有主键

任何人都可以提出一种使用REPLACE指令的方法,大多数INSERT/ON DUPE示例似乎暗示主键是必要的。我通常总是有一个pk,对于这个要求看起来很浪费。非常感谢有时间帮助我的人。 Ken Ashton

对不起,迈克尔,你已经给了我这个例子。我会找出现在的投票,非常感谢球员

+1

您确实应该在'CustID/ProdID'中创建一个唯一的索引,而不是用于性能目的,以保持完整性。 – 2012-03-16 14:44:50

+1

CREATE INDEX idx_unique_custprod ON tblname(CustID,ProdID)' – 2012-03-16 14:45:49

+3

或者更好的是,将它们创建为PK:'ALTER TABLE tblname ADD PRIMARY KEY(CustID,ProdID)' – 2012-03-16 14:47:25

回答

3

正如迈克尔和托尼所说,PK永远不会浪费。所以在每个表格中都有一个PK是个好主意。所以我首先建议你创建一个PK,然后使用INSERT ON DUPLICATE KEY。

为了实现你想要的没有PK,你可以先做一个DELETE然后INSERT。实际上,这是REPLACE内部所做的。

+0

谢谢你们。我是一名初学者,我非常欣赏参照完整性的必要性,只是认为这太简单了,但是你已经强化了我的重要性。你能举个例子把两个非独特的id字段组合成一个唯一的字段,我从来没有这样做过,并且可能会展示INSERT ON DUPLICATE命令如何使用它。非常感谢 – KenAshton 2012-03-16 15:34:43

+1

创建一个公共唯一字段,这应该工作 - “ALTER TABLE tableName ADD UNIQUE INDEX idxName(CustID,ProdID);' – Abhay 2012-03-16 16:26:42

相关问题