需求背景是这样的 有三张表 a表 c表 b表 上传文件解析插入到a表 然后 a表数据和b表数据做对比 看是否有重复数据 有重复数据 修改a表状态 然后 把重复数据插入到c表 没有重复的插入到b表 三张表数据结构一样
百万级数据 求帮忙写一个存储过程的demo 可以参考借鉴一下
CREATEPROCEDURE handleFilePath ( IN filepath varchar )
BEGIN
insert into a表 set `文件路径`=filepath;
DECLARE bFilepath Varchar(20);
SELECT filepath INTO bFilepath from b表 where `文件路径`=filepath;
IF bFilepath != '' THEN
update a表 set '字段'='更新状态'
insert into c表 set `文件路径`=filepath;
ELSEIF bFilepath == '' THEN
insert into b表 set `文件路径`=filepath;
END IF
END;
有更加详细点的需求吗?或者简单的Demo数据。
create procedure user_data()
begin
declare v_id int default 0;
declare v_name varchar(30);
declare u_count int default 0;
declare done int default 0;
declare cur cursor for select id, user_name from app_user;
declare exit handler for not found set done = 1;
open cur;
while done = 0 do
fetch cur into v_id, v_name;
select count(*) into u_count from app_user_stu t where t.user_name = v_name;
if u_count > 0 then
update app_user set user_status = 10 where id = v_id;
insert into app_user_tea(user_name, is_disabled) select user_name, is_disabled from app_user where id = v_id;
else
insert into app_user_stu(user_name, is_disabled) select user_name, is_disabled from app_user where id = v_id;
end if;
end while;
end
随便写个例子给你,优化部分你自己来吧
按照无法写即可
这个需求一定要用mysql存储过程实现么,用python脚本实现会很简单,定时运行python脚本
重复数据是什么概念,指定列相同就算重复还是多列都相同才算重复?
我理了一下思路,你这三张表相当于a是所有数据的全集,b是a的一个不重复的子集,而c是a-b的差集,是这样吧,那么其实不需要比较a和b,因为b中存在a中肯定存在,b中不存在a也肯定不存在,所以新数据来了只需要查询a里边是否有相同数据,插入并修改的同时,已存在就插入c,不存在就插入b,不知道这么理解对不对
其实搞清楚要做的事情和步骤就好做了,你需要通过触发器来实现数据的归类,然后通过存储过程查询数据
这需求,太笼统了,而且这个需求很奇怪,数据库里有的数据需要导入吗?
其实可以将这个存储过程写成一个脚本,可以是ddl,bat,sh,java,python等,定时任务的话可以在window或者linux上面进行建立