我的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"
));
答案 0 :(得分:1)
在MySQL SQL中,控制流语句(如if
)仅在存储块中有效,例如存储过程,函数和触发器。执行此过程的更好方法是使用on duplicate key update
:
insert into tag(Title)
values (:Title)
on duplciate key update RepeatCount = RepeatCount + 1;
这更好,因为数据库处理竞争条件,因此您不必担心被覆盖的值。注意:这假定RepeatCount
已初始化为数字,而不是NULL
。