2011-03-03 72 views
0

我有一个表有两个字段。可以有多个行具有相同的每个字段的值,但只有一行的两个值相同。插入或更新(无钥匙)

嗯,这并没有听起来很好,所以这里的一些例子:

good stuff 
a, 1 
a, 2 
b, 1 
b, 2 < ==== all are unique combinations 

bad stuff 
a, 1 
a, 1 <=== this permutation should only occur once 

所以,作为伪代码:if no row exists with both columns of the give values, then UPDATE INSERT a new row (else, do nothing).

表中没有的键(就是那个错了吗?)。有没有一个单一的命令来做到这一点,INSERT IF NOT EXISTS?或者我首先要搜索,然后决定是否要INSERT?

ODBC中优选的,虽然它是目前,仅在MySQL

回答

1
  1. 我不认为你正在寻找一个upsert查询 - 如果该键被发现,将更新,否则就插入。
  2. 您可以使多个列成为主键。这样做会在表上设置一个唯一的约束,这将不允许重复插入。但是,在大多数数据库中,它会反弹一个错误,所以如果您正在进行批量更新/复制,则不会提交任何更新。

在使多个字段成为主键的数据库术语中称为复合/复合/连接键。

2

您可能正在寻找INSERT ... ON DUPLICATE KEY UPDATE。 (请注意,您需要必须在您的表中有一个唯一的密钥才能工作)

+0

他没有钥匙到位。为了这个工作,你需要有一个主键或唯一的索引。 @LonixSolutions,拥有密钥总是好的,因为密钥的性能会更好 – Rasika 2011-03-03 03:35:50