0

我只是想知道最好的方法来做到这一点。

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

第一个表

id - primary key
title

第二张表

id - primary key
first_id
order

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

例如,如果我尝试在第二个表中插入一条记录 first_id = 10 和 order = 1 并且该记录已经存在,则更新而不是插入新记录。我在某处读到了有关使列组合独一无二的信息,但不知道如何去做。

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

4

4 回答 4

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 的外键。

于 2012-05-21T12:28:14.153 回答
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

至于让它独一无二,这只是确保你不能两次插入这些值,但我认为最好在尝试插入之前检查一下。(我想两者的结合将是完美的)

您可以组合 first_id 和 order UNIQUE 来防止它。

于 2012-05-21T12:33:03.467 回答
0

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

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

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

-悲伤

于 2012-05-21T12:34:59.447 回答
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
于 2012-05-21T12:40:42.010 回答