我知道INSERT ... ON DUPLICATE KEY UPDATE
,但这不起作用,因为我将用于检查现有行的标准不是唯一键或主键。事实上,它将是两个不同的领域。它甚至不能是唯一键,因为值不是唯一的。
这是我的虚拟插入语句
INSERT INTO
videos
(
first_name,
last_name,
addresss,
plan
)
VALUES
(
:first_name,
:last_name,
:addresss,
:plan
)
所以我想说是否已经有一行WHERE last_name = :last_name AND plan = :plan
,然后更新它,否则,添加一个新行。
我可以通过多个查询来做到这一点,但我只是想看看是否有一种方法可以一次性完成这项操作,而无需来回查看。这将在循环中完成,因此如果我必须在多个查询中执行它,它可能会使查询数量翻倍。
答案 0 :(得分:0)
只需在两列上定义唯一索引:
create unique index videos_lastname_plan on videos(lastname, plan);
文件明确指出:
如果指定ON DUPLICATE KEY UPDATE,则插入一行 会在UNIQUE索引或PRIMARY KEY,MySQL中导致重复值 执行旧行的更新。
因此,两个列上的唯一索引非常好。声明是:
INSERT INTO videos (first_name, last_name, addresss, plan)
VALUES (:first_name, :last_name, :addresss, :plan)
on duplicate key update address = VALUES(address), first_name = VALUES(first_name);