mysql 下数据库升级脚本的编写

Posted 苍洱

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 下数据库升级脚本的编写相关的知识,希望对你有一定的参考价值。

1 升级时必须得存储过程

技术分享图片
 1 /**/
 2 drop procedure if exists pro_upgrade;
 3 DELIMITER //
 4 CREATE DEFINER=`root`@`%` PROCEDURE  `pro_upgrade`( 
 5   exec_boolen    int   ,
 6   sql_str             VARCHAR(256)  
 7 )
 8 BEGIN    
 9     # 执行sql 操作
10     IF sql_str <>‘‘ 
11     THEN  
12       set @sql1 =  sql_str;
13       set @bexec = exec_boolen;      
14         
15         if @bexec = 0
16         then 
17             PREPARE execsql FROM @sql1;  
18             EXECUTE execsql ; 
19         end if;
20     END IF;
21 END//
22 DELIMITER ;
View Code

 

  这个存储过程主要是校验表字段是否存在

2 判断库是否存在

技术分享图片
1 CREATE DATABASE IF NOT EXISTS `fqmanagesysdb` /*!40100 DEFAULT CHARACTER SET utf8 */;
2 USE `fqmanagesysdb`;
View Code

 3 判断表是否存在创建

技术分享图片
 1 CREATE TABLE IF NOT EXISTS `userinfo` (
 2   `id` int(11) NOT NULL DEFAULT 1,
 3   `user_name` varchar(255) NOT NULL,
 4   `user_pwd` varchar(255) NOT NULL,
 5   `user_type` tinyint(4) NOT NULL DEFAULT 2,
 6   `Power` int(11) NOT NULL DEFAULT 0,
 7   `DeptID` int(11) NOT NULL DEFAULT 0
 8   PRIMARY KEY (`user_name`,`user_type`),
 9   KEY `userinfo_user_name_index` (`user_name`)
10 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
View Code

4 判断视图是否存在的

 1 DROP VIEW IF EXISTS `allcode_view`; 

5 判断存储过程是否存在

 1 drop procedure if exists procedure_split; 

6 插入初始化数据

1 INSERT INTO `userinfo` (id,user_name,user_pwd,user_type,Power,DeptID)  select 1, admin, admin, 1, 0, 1 from DUAL where not exists (select * from userinfo where user_name = admin);

7 判断触发器是否存在

 1 DROP TRIGGER IF EXISTS `trigger_delete_fucode`; 

8 向表里添加新的字段

1 SELECT count(*) FROM  information_schema.COLUMNS  WHERE TABLE_SCHEMA=fqmanagesysdb AND table_name=userinfo AND COLUMN_NAME=BrokerID into @ret;
2 call pro_upgrade(@ret,alter table userinfo ADD COLUMN BrokerID varchar(255) NOT NULL    );

这里用到了上面的存储过程,mysql里面在非存储过程里面不支持if not exists的判断

9 其他 

待补充……

以上是关于mysql 下数据库升级脚本的编写的主要内容,如果未能解决你的问题,请参考以下文章

记升级mysql后的一次故障

如何编写一个mysql数据库脚本

如何编写一个mysql数据库脚本

如何为 .sdf 数据库编写和运行升级脚本?

linux中怎么查看mysql数据库版本

关于阿里云centos 2.6下手机表情输入后无法保存到mysql数据库的问题调研及mysql版本从5.1升级到5.7的全过程纪要