软件简介:( O" S* ]( O" `$ G
===================================第一步:准备数据================================
2 u3 P. k$ y" G2 y首先将两个区的数据库按以下方式放在一个sql服务器下:( E1 z+ ?0 V- }; @7 y7 y) B
源帐号数据库:db_account
) U$ T( r# W( W- x, k/ |) W: g9 t+ C源角色数据库:db_game( }) T/ w" V$ c( D/ p& R
目标帐号数据库:db_account2
* {3 b% Z9 z; }) \目标角色数据库:db_game2; v( I% U( e" ]2 x' d+ m4 Q% \. z
====================================第二步:清理数据================================* p3 m' C& {4 h& [' W0 {* P
--清理30级以下的角色
D B- ~+ S* l4 D8 D1 X' Tdelete from db_game.t_user where level=30;0 S" r( p2 \* w# c5 E2 L" g0 E
delete from db_game2.t_user where level=30;
+ \4 S7 P4 _3 a3 M% X; e4 \3 Y--清理没有建立角色的帐号
" X; X* S; B& D. f+ e; QDELETE FROM db_account.t_account WHERE NOT accountid IN (
! j) p0 l2 k8 g7 _, Q4 `1 R. B; OSELECT DISTINCT accountid( F. W8 b, p/ H5 p X; e8 X
FROM db_game.t_user);$ ~: F/ t: {& f0 Q7 r7 p
DELETE FROM db_account2.t_account WHERE NOT accountid IN (8 y) M4 G" E+ u4 B
SELECT DISTINCT accountid
, v, P! T. h$ `. O: w# iFROM db_game2.t_user);4 y' C1 Y& Q1 q Q
--清理帐号钻石消费记录 t_gold_used
# D2 z! i+ K+ P( Tdelete from db_account.t_gold_used;
/ F# Q: l. O5 ]6 m& idelete from db_account2.t_gold_used;! j: U! |- [! W/ j
--清理登陆日志t_login
$ E. a5 h; N9 n1 g1 @: ]delete from db_account.t_login;8 H, v% w% ~ E& A
delete from db_account2.t_login;# _" s! A, m1 D+ [' N6 |
--清理正在删除的行会2 K8 f3 r" E/ b1 Z
delete from db_game.t_user_guild where deleted=1;. X$ U2 t% ?# l, i" L8 @6 ], j
delete from db_game2.t_user_guild where deleted=1;
' Y2 S' ~) U* a) J# l2 i! |delete from db_game.t_user_guild_terr where deleted=1;3 h/ x: c) I. b/ ~% s
delete from db_game2.t_user_guild_terr where deleted=1;
' j1 X K6 u) O& |8 j--清理行会杀人数据& B: Y3 Q# q0 r% x
delete from db_game.t_guild_kill_record;
7 U6 s+ R1 L8 R4 `& u$ H# gdelete from db_game2.t_guild_kill_record;
$ d) g/ c* s# v( B. e--清理行会对战数据6 g! P0 c9 G0 z- ?( D
delete from db_game.t_guild_war_pair;1 m' C) ?5 m0 }: X, A" u& z7 u
delete from db_game2.t_guild_war_pair;6 k9 G' V3 N! E. c5 Z
--清理拜师数据
9 |2 q0 J; L# O A0 G! mdelete from db_game.request_teacher_list;7 _+ N$ L9 [( P7 `1 x
delete from db_game2.request_teacher_list;
6 f9 W3 j3 |- X6 t( K" j; V, e5 R--清理杀人数据% J+ l! l* T9 i1 N: U8 }
delete from db_game.t_murder;
) \% F2 X5 o3 |1 M" |delete from db_game2.t_murder;
d- M: m( W8 A/ _" Q--清理pve排行数据
2 a- e1 s$ L4 d" mdelete from db_game.t_pve_rank;" e+ ^) l7 S. G* U$ d( W9 L
delete from db_game2.t_pve_rank;
- C9 T, M6 z3 u* O' S5 v====================================第二步:整理源数据================================+ y7 p0 }, P# h$ L8 S
查询重复帐号id* H( a/ D p* r$ Y' F2 Q
select accountid from db_account.t_account order by accountid asc;
/ W3 U2 O8 q0 R( Bselect accountid from db_account2.t_account order by accountid desc;
2 r& c9 n" [! Z' v! B查看accountid最小值为: n1- i+ G Y% \; u: b0 D7 k; ^. d
查看accountid2最大值为: n2% Z+ D- [" d" \# p+ ?- |# [3 |" s
N = n2 - n1 + 1
1 g0 v$ K7 g( Z, E- |修改重复帐号id(操作之前需要取消源数据的t_account主键和自动递增)
* {. f/ x4 |$ q" {# ?, c$ \update db_account.t_account set accountid=accountid+N;
9 ]4 N9 S, V7 ?! ]: e+ Pupdate db_game.t_user set accountid=accountid+N;
6 k- J3 |8 q$ Z7 S5 M5 M( a+ w% j--查询重复帐号名称
& `5 {5 Z3 U5 O: k, S. hSELECT name FROM db_account.t_account WHERE name IN (SELECT name FROM db_account2.t_account);( f. B9 w# Y$ r9 L
--修改重复帐号名称+a
% D5 ^3 K5 w4 o2 C8 Bupdate db_account.t_account set name= Concat(name,'a') WHERE name IN (SELECT name FROM db_account2.t_account);
* U s1 _& V- m( }; T, ^, x5 E查询重复角色id' a5 J5 u6 U$ o* F3 _- s9 ~2 @
SELECT dbid FROM db_game.t_user WHERE dbid IN (SELECT dbid FROM db_game2.t_user);% c( a7 h# E6 O* h
--查询重复角色名称2 p. {5 L! h# x7 u) I6 @8 \8 w ]: H
SELECT name FROM db_game.t_user WHERE name IN (SELECT name FROM db_game2.t_user);
! L; f/ p5 ^( {) T--修改重复角色可以改名- a1 u. t9 n0 f# v9 {. t
update db_game.t_user set changename=1 WHERE name IN (SELECT name FROM db_game2.t_user);; a* C, N6 L2 c: p
--修改重复角色名称+★(可以不改。玩家上线必须改名才允许进入游戏)
9 x( m; G" C @9 O) | H/ T/ Bupdate db_game.t_user set name= Concat(name,'★') WHERE name IN (SELECT name FROM db_game2.t_user);# T: X& ^8 S4 [7 c) U4 P0 Q7 E
--查询重复行会id$ p X$ S8 r& z& w/ ~
SELECT guildid FROM db_game.t_user_guild WHERE guildid IN (SELECT guildid FROM db_game2.t_user_guild);# O' t" d' l9 Y2 j
--查询重复行会名: r6 `0 s: {1 P7 J2 w) D
SELECT name FROM db_game.t_user_guild WHERE name IN (SELECT name FROM db_game2.t_user_guild);
! M- q1 S- z3 j7 o- I6 O' lSELECT guild FROM db_game.t_user WHERE guild IN (SELECT guild FROM db_game2.t_user);2 B2 _- ~* f$ b5 g
--修改重复行会名+ H( H# L8 B4 |" T( a* b! o
update db_game.t_user_guild set name= Concat(name,'') WHERE name IN (SELECT name FROM db_game2.t_user_guild);* L9 w+ Z5 B; y2 K7 t7 c6 ?
update db_game.t_user set guild= Concat(guild,'') WHERE guild IN (SELECT guild FROM db_game2.t_user);
. G; G+ {* N: f" [====================================第三步:处理角色名称数据(可选)================================
$ b3 [- o! S0 Y! q4 X- L) q--查询重复拍卖id
2 y1 h* L8 g) dSELECT auctionitemid FROM db_game.t_auction_item WHERE auctionitemid IN (SELECT auctionitemid FROM db_game2.t_auction_item);$ z. q; o' L% V9 y; A7 C
--查询重复邮件id
8 \( T7 t: C4 I% `7 O; n6 @SELECT mailid FROM db_game.t_user_mail WHERE mailid IN (SELECT mailid FROM db_game2.t_user_mail);
9 l$ ?( w* ^' @8 t2 _--修改相关重复角色名称+★(可以不改。玩家上线必须改名才允许进入游戏)
& l: F" b5 l# K3 p% Rupdate db_game.t_auction_item set ownername= Concat(ownername,'★') WHERE ownername IN (SELECT name FROM db_game2.t_user);7 t# x: C8 v l1 t
update db_game.t_defend_equip_rank set ownername= Concat(ownername,'★') WHERE ownername IN (SELECT name FROM db_game2.t_user);! K! r7 t3 W3 X* [( B
update db_game.t_main_trump_rank set ownername= Concat(ownername,'★') WHERE ownername IN (SELECT name FROM db_game2.t_user);4 }* `' [" C9 ?! ~2 m* m
update db_game.t_user_mail set sendername= Concat(sendername,'★') WHERE sendername IN (SELECT name FROM db_game2.t_user);, g L, `5 P4 P5 F1 x
update db_game.t_user_mail set recvname= Concat(recvname,'★') WHERE recvname IN (SELECT name FROM db_game2.t_user);" k# \6 S* x. B, i8 @
update db_game.t_student set studentname= Concat(studentname,'★') WHERE studentname IN (SELECT name FROM db_game2.t_user); E# t7 v* V8 t6 t+ ?
update db_game.t_teacher set teachername= Concat(teachername,'★') WHERE teachername IN (SELECT name FROM db_game2.t_user);; k- U8 B7 V( O* I4 n3 q; ~
====================================第四步:开始将源数据合并到目标数据================================& n- n# B. N# k1 o4 L
开始合并:
& ^- Z% i$ @0 R/ G3 s+ V! }使用Navicat for MySQL的数据传输方式:7 n$ V. G9 l5 D; N3 l4 c3 V
将源帐号数据db_account通过直接传输的方式合并到db_account2,数据库物件只选t_account表格,其它的不用选
! P: R7 |' s4 e) n) F9 i将源角色数据db_game通过直接传输的方式合并到db_game2,数据库物件取消t_user_dungeon_team,t_vars,t_war_area表格,其它全选
, Z# f) r8 L9 X* ^+ f% [注意:传输数据前要将 高级菜单==创建表 选项取消% ^8 d, \- i" r; j E% g
====================================合并结束,db_account2与db_game2数据为最终一二区合并数据================================
8 Z1 n$ G! R5 R9 {/ a) K+ J5 a2 |by Siline 2010.7.1
" k. H! ]$ U: i4 A* [( J& E6 \' y8 P
& ^+ |- X% q6 |. v% q" O
}4 s+ ]% E V# t4 l3 l下载地址:
|