使两列有一个唯一的关键,但只有当两个匹配?
我有以下表结构:使两列有一个唯一的关键,但只有当两个匹配?
OFFER_ID -|- COUNTRY -|- URL
1 -|- GB -|- http://www.example.com/1
1 -|- US -|- http://www.example.com/2
1 -|- FR -|- http://www.example.com/3
我要的是更新URL
时BOTH的OFFER_ID
和GB
表中已经存在。
例如,如果搜索条件是:
INSERT INTO table_name (offer_id, country, url) VALUES ('1','DE', 'http://www.example.com/3')
OR
INSERT INTO table_name (offer_id, country, url) VALUES ('2','FR', 'http://www.example.com/4')
一个新行会被插入作为虽然OFFER_ID
的值(在实施例。2)和COUNTRY
(在例1中)是新的,值为COUNTRY
(在前。 2)和OFFER_ID
(在例1中)不是。
然而,这样的查询:
INSERT INTO table_name (offer_id, country, url) VALUES ('1','FR', 'http://www.example.com/7')
的URL
列将被更新。
我知道使用ON DUPLICATE KEY UPDATE url=VALUES(url)
将是未来的方向,但如何将能够构建这样只有当两个OFFER_ID
和COUNTRY
不是唯一的,作为反对新行被插入的URL
列被更新?
任何帮助将不胜感激:)!
可以使双方一个主键
PRIMARY KEY (`offer_id`, `country`)
的一部分创建的(OFFER_ID,COUNTRY)唯一索引,并ON DUPLICATE KEY UPDATE
将工作:
ALTER TABLE foo
ADD UNIQUE INDEX offer_id_country (OFFER_ID, COUNTRY);
或者一个主键,如果你没有一个已经:
ALTER TABLE foo
ADD PRIMARY KEY (OFFER_ID, COUNTRY);
谢谢:)。为什么'offer_id_country'连接字符串,这是什么意思? – Avicinnian
@Pixelatron:它是索引的名称。你可以指定你喜欢的任何名字,而'offer_id_country'则反映'offer_id'和'country'都包含在这个特定的名称中。 – zerkms
@zerkms - 我猜我混淆了'UNIQUE KEY'和'UNIQUE INDEX'。 – Avicinnian
尝试使用Mysql的REPLACE
函数。在(OFFER_ID,COUNTRY)上创建唯一密钥后。
REPLACE INTO table_name (offer_id, country, url) VALUES ('1','FR', 'http://www.example.com/7')
'重复密钥更新'不会在相同的情况下工作,还是基本上做同样的事情,但开销较少? – Avicinnian
我想它会,但是用REPLACE,不需要改变表格的结构 – Tom
辉煌。正是我在找什么! – Avicinnian