更新记录是否"标题"插入时已存在于表中

时间:2015-12-05 11:45:04

标签: php mysql if-statement pdo

我的MySql数据库中有tag表,就像这样。

Id    Title    RepeatCount
--------------------------
 1     Tag1        1
 2     Tag2        5
 3     Tag3        8

我想在PDO中将记录插入表中,如果不存在相同Title的记录(Title是主键)并且如果存在,则增加记录RepeatCount

就像这个例子:

prepare(
    "IF (:Title IN (SELECT Title FROM tag)) 
     THEN INSERT INTO tag (Title) VALUES (:Title)
     ELSE UPDATE tag SET RepeatCount = RepeatCount + 1"
);
execute(array(
    ":Title" => "MyTag"
));

1 个答案:

答案 0 :(得分:1)

在MySQL SQL中,控制流语句(如if)仅在存储块中有效,例如存储过程,函数和触发器。执行此过程的更好方法是使用on duplicate key update

insert into tag(Title)
    values (:Title)
    on duplciate key update RepeatCount = RepeatCount + 1;

这更好,因为数据库处理竞争条件,因此您不必担心被覆盖的值。注意:这假定RepeatCount已初始化为数字,而不是NULL