MySQL数据库升级脚本

本文介绍了如何使用MySQL数据库的升级脚本upgrade.sql,通过在命令行中输入mysql < upgrade.sql来执行升级操作,帮助用户更新数据库结构和数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#更改表结构

ALTER TABLE e_feerule CHANGE code prefix varchar(255not null;
ALTER TABLE e_feerule CHANGE locationName location varchar(255not null;
ALTER TABLE e_feerule CHANGE ruleset_id feerategroup_id int(11not null;
ALTER TABLE e_customer CHANGE ruleset_id feerategroup_id int(11not null;
ALTER TABLE e_customer CHANGE state locktype int(11null;
ALTER TABLE e_customer DROP COLUMN paytype;
ALTER TABLE e_customer DROP COLUMN alarmmoney;
ALTER TABLE e_customer DROP COLUMN discountset_id;
ALTER TABLE e_bill_template CHANGE gatewayfeetime agentfeetime int(11null;
ALTER TABLE e_bill_template ADD feeprefix varchar(255null after holdtime;
ALTER TABLE e_bill_template ADD suitefeetime int(11null after fee;
ALTER TABLE e_bill_template ADD suitefee double null after fee;
ALTER TABLE e_bill_template ADD agentfeeprefix varchar(255null after customername;
ALTER TABLE e_bill_template ADD agentsuitefeetime int(11null after agentfee;
ALTER TABLE e_bill_template ADD agentsuitefee double null after agentfee;
ALTER TABLE e_bill_template CHANGE relateindex cdrlevel int(11null;
ALTER TABLE e_bill_template CHANGE rel_id subcdr_id int(11null;
ALTER TABLE e_gateway DROP COLUMN remainmoney;
ALTER TABLE e_gateway DROP COLUMN ruleset_id;
ALTER TABLE e_gateway DROP COLUMN discountset_id;
ALTER TABLE e_gateway ADD clearingcustomer_id int(11not null after mbx_id;
UPDATE e_gateway SET clearingcustomer_id = -1;
ALTER TABLE r_ruleset_privileges CHANGE ruleset_id feerategroup_id int(11null;
ALTER TABLE e_discountset ADD giftmoney double null after name;
ALTER TABLE e_discountset ADD rentfee double null after name;
ALTER TABLE e_discountset ADD renttype int(11null after name;
ALTER TABLE r_discountset_privileges CHANGE discountset_id suite_id int(11null;
ALTER TABLE e_ot_maxid CHANGE maxid maxid bigint null;
UPDATE e_ot_maxid SET maxid = "SELECT MAX(flowno) FROM e_bill" WHERE type = 'e_bill_flowno';
UPDATE e_ot_maxid SET type = 'e_cdr' WHERE type = 'e_bill';
UPDATE e_ot_maxid SET type = 'e_cdr_flowno' WHERE type = 'e_bill_flowno';

#更改旧表

ALTER TABLE e_feerule RENAME e_feerate;
ALTER TABLE e_ot_maxid RENAME e_othermaxid;
ALTER TABLE e_bill_template RENAME e_cdr_template;
ALTER TABLE e_ruleset RENAME e_feerategroup;
ALTER TABLE r_ruleset_privileges RENAME r_feerategroup_privileges;
ALTER TABLE e_discountset RENAME e_suite;
ALTER TABLE r_discountset_privileges RENAME r_suite_privileges;
DROP TABLE e_payhistory_other;

#创建新表

create table if not exists e_feeratebytime (
 id 
int(11),
 type 
int(11null,
 startday 
bigint null,
 endday 
bigint null,
 starttime 
int(11null,
 endtime 
int(11null,
 suite_id 
int(11),
 feerategroup_id 
int(11),
 
primary key (id)
) type
=MyISAM;

create table if not exists e_suiteorder (
 id 
int(11not null,
 availabletime 
bigint null,
 suite_id 
int(11not null,
 customer_id 
int(11not null,
 
primary key (id)
) type
=MyISAM;

create table if not exists e_gifttime (
 id 
int(11not null,
 prefix 
varchar(255null,
 gifttime 
int(11null,
 memo 
varchar(255null,
 suite_id 
int(11not null,
 
primary key (id)
) type
=MyISAM;

create table if not exists e_currentgifttime (
 id 
int(11not null,
 prefix 
varchar(255null,
 gifttime 
int(11null,
 memo 
varchar(255null,
 currentsuite_id 
int(11not null,
 
primary key (id)
) type
=MyISAM;

create table if not exists e_currentsuite (
 id 
int(11not null,
 name 
varchar(255null,
 renttype 
int(11null,
 nextrenttime 
bigint null,
 giftmoney 
double null,
 suiteoderid 
int(11null,
 suiteid 
int(11null,
 customer_id 
int(11not null,
 
primary key (id)
) type
=MyISAM;

#存储过程

DELIMITER 
//

DROP PROCEDURE IF EXISTS updatetable//

CREATE PROCEDURE updatetable(prefixcmd text,tableprefix text,postfixcmd text)
BEGIN
    
DECLARE done INT DEFAULT 0;
    
DECLARE a CHAR(32);
    
DECLARE cur1 CURSOR FOR SHOW TABLES;
    
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    
OPEN cur1;
    REPEAT
        
FETCH cur1 INTO a;
        
IF a LIKE tableprefix THEN
            
SET @sqlcmd = CONCAT(prefixcmd,' ',a,' ',postfixcmd);
            
SELECT @sqlcmd;
            
prepare sqlstmt FROM @sqlcmd;
                
execute sqlstmt;
        
END IF;
    until done 
END REPEAT;
    
CLOSE cur1;
END//

DROP PROCEDURE IF EXISTS renametable//

CREATE PROCEDURE renametable(tableprefix text)
BEGIN
    
DECLARE done INT DEFAULT 0;
    
DECLARE a CHAR(32);
    
DECLARE cur1 CURSOR FOR SHOW TABLES;
    
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    
OPEN cur1;
    REPEAT
        
FETCH cur1 INTO a;
        
IF a LIKE tableprefix THEN
            
SET @newname := REPLACE(a,'bill','cdr');
            
SET @sqlcmd = CONCAT('ALTER TABLE',' ',a,' ','RENAME '@newname);
            
SELECT @sqlcmd;
            
prepare sqlstmt FROM @sqlcmd;
                
execute sqlstmt;
        
END IF;
    until done 
END REPEAT;
    
CLOSE cur1;
END//

DROP PROCEDURE IF EXISTS droptable//

CREATE PROCEDURE droptable(tableprefix text)
BEGIN
    
DECLARE done INT DEFAULT 0;
    
DECLARE a CHAR(32);
    
DECLARE cur1 CURSOR FOR SHOW TABLES;
    
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
    
OPEN cur1;
    REPEAT
        
FETCH cur1 INTO a;
        
IF a LIKE tableprefix THEN
            
SET @sqlcmd = CONCAT('DROP TABLE ',a);
            
SELECT @sqlcmd;
            
prepare sqlstmt FROM @sqlcmd;
                
execute sqlstmt;
        
END IF;
    until done 
END REPEAT;
    
CLOSE cur1;
END//

DELIMITER ;

#调用存储过程

CALL updatetable(
'ALTER TABLE','e_bill_%','CHANGE gatewayfeetime agentfeetime int(11)');
CALL updatetable(
'ALTER TABLE','e_bill_%','ADD feeprefix varchar(255) after holdtime');
CALL updatetable(
'ALTER TABLE','e_bill_%','ADD suitefeetime int(11) after fee');
CALL updatetable(
'ALTER TABLE','e_bill_%','ADD suitefee double after fee');
CALL updatetable(
'ALTER TABLE','e_bill_%','ADD agentfeeprefix varchar(255) after customername');
CALL updatetable(
'ALTER TABLE','e_bill_%','ADD agentsuitefeetime int(11) after agentfee');
CALL updatetable(
'ALTER TABLE','e_bill_%','ADD agentsuitefee double after agentfee');
CALL updatetable(
'ALTER TABLE','e_bill_%','CHANGE relateindex cdrlevel int(11)');
CALL updatetable(
'ALTER TABLE','e_bill_%','CHANGE rel_id subcdr_id int(11)');
CALL renametable(
'e_bill_%');
CALL droptable(
'e_bill');

#删除存储过程

DROP PROCEDURE updatetable;
DROP PROCEDURE renametable;
DROP PROCEDURE droptable;

#确保执行后的结束符仍为;

DELIMITER ;

注:以上为MySQL数据库升级脚本upgrade.sql。命令行下输入mysql < upgrade.sql即可执行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值