Skip to content

mysql存储过程

对表结构字段的升级的例子:delimiter就是告诉mysql解释器,该段命令是否已经结束了,是否可以执行了。默认情况下,delimiter是分号 ; ,遇到分号就执行。后面的双美元符号 就是告诉mysql,遇到双美元符号再执行;

mysql存储过程设置编码格式CHARACTER SET 'utf8mb4'

DELIMITER $$

USE `ddxhl`$$
-- 如果存在存储过程,删除该存储过程
DROP PROCEDURE IF EXISTS `updateDB`$$
-- 创建存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `updateDB`()

BEGIN
--开始

-- 升级数据库存储过程
-- Version:1.5.0
-- 升级	用户扩展信息表(user_ext),TABLE_SCHEMA表示数据库,table_name表示表名,column_name表示字段名
-- information_schema.columns查询所有的表和字段。
  IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE TABLE_SCHEMA = 'ddxhl' AND table_name = 'user_ext' AND column_name = 'profile') THEN
  -- 编辑该表
	 ALTER TABLE `ddxhl`.`user_ext`
   -- 添加字段
		ADD COLUMN `profile` VARCHAR(512)  CHARACTER SET 'utf8mb4' NOT NULL DEFAULT '' COMMENT '简介' AFTER `nickname`;
-- 界面提示
 	SELECT ' Update user_ext ok(Add Column:profile)';
 END IF;

-- Version:1.5.0
-- 升级	订单表(order_info)
  IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE TABLE_SCHEMA = 'ddxhl' AND table_name = 'order_info' AND column_name = 'bank_name') THEN
	 ALTER TABLE `ddxhl`.`order_info`
		ADD COLUMN `bank_name` VARCHAR(64) NOT NULL DEFAULT '' COMMENT '开户银行名称 ' AFTER `postcode`;

		--  添加索引
		ADD INDEX `idx_sos_info` (`province_code` ASC, `city_code` ASC, `district_code` ASC, `street_code` ASC);

		ALTER TABLE ddxhl.`gov_subsidy_detail`
		-- 删除索引
		DROP INDEX `idx_gov_subsidy_detail` ,
		ADD  INDEX `idx_gov_subsidy_detail` (`gov_object_id` ASC,`id_card` ASC),
		ADD  INDEX `idx_gov_ subsidy_detail_region` (`province_code` ASC, `city_code` ASC, `district_code` ASC);


 	SELECT ' Update order_info ok(Add Column:bank_name...account_no)';
 END IF;

END$$
--结束

DELIMITER ;