mysql数据库中同步两个表中的数据的问题
问问大家假如我在数据库database中有两个表分别是players和usersplayers里有一列为playername一列为ipadressusers表里两列分别是...
问问大家 假如我在数据库database中有两个表 分别是players 和users players里有一列为playername 一列为ipadress users表里两列分别是username 和ip
实际上playername和username里的数据是相同的 但出于技术原因,users表中的ip地址为空,让playername表中每一行playername对应users表中的usersname 并将ipadress全部写入对应的ip中 这样如何搞定?最好不只是能处理当前录入的数据 而是让以后ipadress里写入数据的时候ip里会同步数据 展开
实际上playername和username里的数据是相同的 但出于技术原因,users表中的ip地址为空,让playername表中每一行playername对应users表中的usersname 并将ipadress全部写入对应的ip中 这样如何搞定?最好不只是能处理当前录入的数据 而是让以后ipadress里写入数据的时候ip里会同步数据 展开
1个回答
展开全部
写个存储过程,方便以后调用,下面是手动写的不对的地方自己改改;
写得累死了,还加了注释 不加分 天理难容 累觉不爱
create or replace procedure publish_users is
cursor c_record_players is
select * from players;
v_cur c_record_players%rowtype;
v_db players%rowtype;
begin
--打开游标,处理结果集
open c_record_players;
loop
fetch c_record_players
into v_cur;
exit when c_record_players %notfound;
--如果是刚开始 users表是空的就插入数据
begin
select count(*)
into v_record_num
from users t
where t.id = v_cur.id;
if v_record_num = 0 then
insert into users
( Ip ,
username)
values
( v_cur.ipadress ,
v_cur.playername
);
else
--方便以后处理如果users不是空的那么就更新数据
update users
set ip = v_cur.ipadress ,
username = v_cur.playername ,
where username = v_cur.playername;
end if;
--数据量大的话 每5000条提交一次
if mod(c_record_players%rowcount,5000) = 0 then
commit;
end if;
end loop;
close c_record_players;
end publish_users;
写得累死了,还加了注释 不加分 天理难容 累觉不爱
create or replace procedure publish_users is
cursor c_record_players is
select * from players;
v_cur c_record_players%rowtype;
v_db players%rowtype;
begin
--打开游标,处理结果集
open c_record_players;
loop
fetch c_record_players
into v_cur;
exit when c_record_players %notfound;
--如果是刚开始 users表是空的就插入数据
begin
select count(*)
into v_record_num
from users t
where t.id = v_cur.id;
if v_record_num = 0 then
insert into users
( Ip ,
username)
values
( v_cur.ipadress ,
v_cur.playername
);
else
--方便以后处理如果users不是空的那么就更新数据
update users
set ip = v_cur.ipadress ,
username = v_cur.playername ,
where username = v_cur.playername;
end if;
--数据量大的话 每5000条提交一次
if mod(c_record_players%rowcount,5000) = 0 then
commit;
end if;
end loop;
close c_record_players;
end publish_users;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询