SQL唯一列组合

时间:2012-05-21 12:25:51

标签: mysql insert

我只是想知道最好的方法。

我有一个包含2个表的数据库。

第一张表

id - primary key
title

第二张表

id - primary key
first_id
order

我想知道在插入时是否存在first_id和order的组合然后更新else插入的最佳方法是什么?

例如,如果我尝试将记录插入第二个表first_id = 10并且order = 1并且已经存在则更新而不是插入新记录。我在某处读过有关列的组合,但不确定如何使用。

编辑:对不起,我忘了提到我使用MySQL

4 个答案:

答案 0 :(得分:2)

假设sql -server ...

if exists ( select 1 from table2 where  id=@id and firstId=@firstid)
begin
  update table2 set(...)
end
begin
insert into table2 select ...
end

请确保first_id是table1的id的外键。

答案 1 :(得分:0)

对于MSSQL,您可以使用以下内容:

IF NOT EXISTS (SELECT id from Second Table WHERE first_id = 10 AND order = 1)
BEGIN
   INSERT INTO Second Table (first_id, order) VALUES (10, 1)
END
ELSE
BEGIN
   UPDATE Second Table SET order = 1 WHERE first_id = 10
END

至于使它唯一,这只是确保你不能两次插入这些值,但我认为在tryint插入之前检查这个可能更好。 (两者的组合将是完美的,我猜)

您可以组合使用first_id和命令UNIQUE来阻止它。

答案 2 :(得分:0)

如果您直接在表格中插入数据,您可以制作一个类似Royi的答案的触发器将帮助您。

如果您希望在尝试插入一对数据时插入失败,或者换句话说如果要创建唯一约束,则link可能会对您有所帮助。

其他方法是通过存储过程插入数据并在插入之前执行检查。

-Sadd

答案 3 :(得分:0)

这种方式在更新方案中,您只扫描一次表。插件的性能仍然相同。

UPDATE Second Table SET order = 1 WHERE first_id = 10
if ROW_COUNT() = 0 
begin
   INSERT INTO Second Table (first_id, order) VALUES (10, 1)
end