我编写了以下程序,但是当它执行时,表中始终只保留一个数据,并且只要对存储过程进行调用,就会删除休息。
所以最后只存储了最新的值,其余的都被删除了,所以我最终只能从我的表中获取一个结果数据。
我在以下程序中做了什么问题?
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$$
答案 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'代替: