【发布时间】:2011-01-04 00:27:40
【问题描述】:
我有一个简单的 INSERT 查询,当主键重复时,我需要使用 UPDATE 代替。在 MySQL 中这似乎更容易,在 Oracle 中似乎我需要使用 MERGE。
我能找到的所有 MERGE 示例都有某种“源”和“目标”表,在我的例子中,源和目标是同一个表。我无法理解这些示例来创建自己的查询。
MERGE 是唯一的方法还是有更好的解决方案?
INSERT INTO movie_ratings
VALUES (1, 3, 5)
基本上就是这样,主键是前两个值,所以更新应该是这样的:
UPDATE movie_ratings
SET rating = 8
WHERE mid = 1 AND aid = 3
我想使用一个触发器,它会在调用 INSERT 时自动执行 UPDATE 语句,但前提是主键是重复的。这样做有什么问题吗?我需要一些关于触发器的帮助,因为我在尝试理解它们并自己做时遇到了一些困难。
【问题讨论】:
-
在这样的示例中,使用 INSERT 中的(可选)列名列表来为我们提供足够的表结构是明智的。也许如果你展示了 MySQL 的功能,人们可能会看到你在追求什么——或者这可能是我的好奇心/懒惰。
-
表结构是隐式的,是mid(int),aid(int), rating(int)。
标签: oracle merge insert upsert