在mysql中创建一个存储过程,如果存在则删除该行,如果不插入值

时间:2011-04-06 11:46:21

标签: mysql

我编写了以下程序,但是当它执行时,表中始终只保留一个数据,并且只要对存储过程进行调用,就会删除休息。

所以最后只存储了最新的值,其余的都被删除了,所以我最终只能从我的表中获取一个结果数据。

我在以下程序中做了什么问题?

CREATE PROCEDURE `PersonVisitInfo`(personid varchar(254),visits int )
BEGIN
declare _personid varchar(254);
declare _visit_count int;
declare oldest_item varchar(254);

set _personid   = personid;
set _visit_count = visits;

delete from personData where personid = _personid ;

if (select count(*) from personData where personid = _personid) >= _visit_count then
    SELECT id into oldest_item FROM personData  WHERE personid = _personid ORDER BY lastvisitdate LIMIT 1;
    DELETE FROM personData WHERE id = oldest_item; 
end if;

insert into personData(id, personid, lastvisitdate) values(UUID(), _personid, now());

END$$

2 个答案:

答案 0 :(得分:3)

您需要删除此行:

delete from personData where personid = _personid ;

这将从表中删除所有人的记录,这意味着以下if语句将始终为false,最后一行将插入新记录 - 这将是该人的唯一记录。

答案 1 :(得分:0)

delete from personData where personid = _personid ;

if (select count(*) from personData where personid = _personid) >= _visit_count

但是你刚删除了所有的行 - 所以'if'语句永远不会是真的。

暂且不说,为什么不在personid上使用唯一键并使用'REPLACE'或'INSERT .... ON DUPLICATE KEY UPDATE'代替: