我只是想知道最好的方法。
我有一个包含2个表的数据库。
第一张表
id - primary key
title
第二张表
id - primary key
first_id
order
我想知道在插入时是否存在first_id和order的组合然后更新else插入的最佳方法是什么?
例如,如果我尝试将记录插入第二个表first_id = 10并且order = 1并且已经存在则更新而不是插入新记录。我在某处读过有关列的组合,但不确定如何使用。
编辑:对不起,我忘了提到我使用MySQL
答案 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