CHONGZHI充值表 uid charid
CHARBASE 玩家基本数据,charid 和accid一一对应。
FLATFORMID2ACCID 玩家uid 和accid 一一对应。
假如chongzhi
表里面的uid都错了如何根据charid在charbase中找到对应的accid,然后利用accid在表FLATFORMID2ACCID中找到对应的uid,并将此uid更新到chongzhi表的uid字段呢?
这个过程涉及到了三部分和三张表且都有条件判断。用普通sql语句很难处理,神马存储过程我更是一点不懂,mysql中给我们提供了一个临时表机制。所以可以将每一步操作
保存到一个临时表中,然后对临时表操作,可以非常方便的实现对数据库数据的更正。
①根据CHONGZHI表中的charid记录,分别从两个db的charbase表中查找相应的accid然后插入到临时表TTT和TTT2中。
CREATE TEMPORARY TABLE TTT SELECT C.ACCID, C.CHARID FROM
charbasedb1.CHARBASE C JOIN CHONGZHI ON CHONGZHI.CHARID=C.CHARID;
CREATE TEMPORARY TABLE TTT2 SELECT C.ACCID, C.CHARID FROM
charbasedb2.CHARBASE C JOIN CHONGZHI ON CHONGZHI.CHARID=C.CHARID;
②将TTT2中数据合并到TTT中
INSERT INTO TTT SELECT * FROM TTT2;
③给TTT表增加一个uid字段
ALTER TABLE TTT ADD `UID` varchar(80) NOT NULL default '';
④根据FLATFORMID2ACCID表字段值设置TTT表uid值
UPDATE TTT AS TTT, FLATFORMID2ACCID AS
FLATFORMID2ACCID SET
TTT.UID=FLATFORMID2ACCID.PLATFORMID WHERE
TTT.ACCID=FLATFORMID2ACCID.ACCID;
⑤根据TTT表中uid更新CHONGZHI表中错误的uid字段值。
UPDATE CHONGZHI AS CHONGZHI, TTT AS TTT SET CHONGZHI.UID=TTT.UID
WHERE CHONGZHI.CHARID=TTT.CHARID;
关闭连接临时表自动消失
最后引用一段mysql官方手册话“
在创建表格时,您可以使用TEMPORARY关键词。只有在当前连接情况下,TEMPORARY表才是可见的。当连接关闭时,TEMPORARY表被自动取消。这意味着两个不同的连接可以使用相同的临时表名称,同时两个临时表不会互相冲突,也不与原有的同名的非临时表冲突。(原有的表被隐藏,直到临时表被取消时为止。)您必须拥有CREATE
TEMPORARY TABLES权限,才能创建临时表。“