如果新行尚未存在,则根据非唯一列插入新行

时间:2014-01-28 00:11:21

标签: php mysql pdo insert

我知道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,然后更新它,否则,添加一个新行。

我可以通过多个查询来做到这一点,但我只是想看看是否有一种方法可以一次性完成这项操作,而无需来回查看。这将在循环中完成,因此如果我必须在多个查询中执行它,它可能会使查询数量翻倍。

1 个答案:

答案 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);