mysql实战之临时表、存储过程、if语句、循环

  • 一、知识拆解

    • 1、创建临时表
      • 1.1 作用 :临时保存表数据
      • 1.2 生命周期: 随创建语句而产生,随当前 会话关闭而自动销毁,或者手动销毁
      • 1.2 基本语法
        	// 语法上和创建普通 表 多加了TEMPORARY ,其他完全一样
        	 create TEMPORARY table table_name (
        	 	col type,
        	 	col2 type
        	 ) Engine=InnoDB default charset utf8;
        
      • 1.3 手动销毁
        	//  关于临时表的增删改查和普通 表完全一致,放心大胆写即可
        	drop table if EXISTS temp_store_data;
        
      • 1.4 实例
        	 -- 创建临时表
        	drop table if EXISTS temp_store_data;
        	create TEMPORARY table temp_store_data(
        		rowNum VARCHAR(20) ,
        		plantId VARCHAR(20),
        		minDate  datetime,
        		maxDate  datetime
        	)Engine=InnoDB default charset utf8;
        
    • 2、会话变量和全局变量
      这一块建议大家直接查看博友的一篇博客,写的很全
    • 3、批量插入符合条件的数据
      • 3.1 常规插入数据
        	// 此方式适用于有限且已知的数据,可以执行此操作
        	insert into temp_store_data(rowNum ,plantId ,minDate, maxDate   )
        	values (?,?,?,?), (?,?,?,?), (?,?,?,?), (?,?,?,?);
        
      • 3.2 另一种写法
        	// 此写法适用于不确定要插入多少数据,甚至可能是变动的,但知道来自那张表和筛选条件
        	insert into temp_store_data(rowNum ,plantId ,minDate, maxDate   )
        		select col as rowNum, col2 as plantId,col3 as minDate, null as maxDate 
        		from table_another 
        		where userId = 1 ;
        
    • 4、分组重新编号
      • 4.1 实现效果
        在这里插入图片描述
      • 4.2 具体实现
        // 具体编写,关键知识是借助 会话变量@group_row,@parent_code
        select 
        	 @group_row:=CASE when @parent_code=plantId then  @group_row+1 else 1 end as rowNum,
        	 @parent_code:=plantId as plantId 
        from fct_record_harvest ;
        
    • 5、存储过程
      • 5.1 作用:存储过程,其实就是数据库编程,利用编程逻辑实现复杂的业务逻辑
      • 5.2 基本语法:
        	create PROCEDURE proc_name()
        	begin
        		// statement:你可以设置变量、if判断、循环等各种语法都很支持
        	end ;
        
      • 5.3 删除语法:
        	DROP  PROCEDURE if exists  proc_name;
        
      • 5.4 实例
      	// 创建存储过程 ,设置每一段的时间周期
      	DROP  PROCEDURE if exists  dowhile;
      	
      	create PROCEDURE dowhile()
      	BEGIN
      	// 设置变量
      	set @max = (select count(*) from temp_store_data);
      	set @min = 1 ;
      	set @startDate  = null;
      	
      	// if 判断
      	if @max > 1 then 
      		set @max = @max+1;
      		insert into temp_store_data(rowNum,plantId) values(@max,1692);
      	end if ;
      	
      	// while循环
      	while @min <= @max DO
      		update temp_store_data set minDate = @startDate where rowNum = @min;
      		set @startDate = (select maxDate from temp_store_data where rowNum= @min) ;
      		set @min= @min+1;
      	END WHILE;
      	end ;
      	
      	// 调用存储过程
      	call dowhile();
      
    • 6、if判断与case…when
      • 6.1 if 基本语法
      	if [条件1] then
      		// 操作
      	else if [条件2] then 
      		// 操作2
      	else 
      		// 操作3
      	end if 
      
      • 6.2 case…when 基本语法
      	case
      		when  [条件1]  then
      			// 操作
      		when   [条件2] then 
      			// 操作2
      		else 
      			// 操作3
      	end 
      
      • 6.3 case …when 的另一种语法
      	case colName
      		when val1 then 
      			// 操作
      		when val1 then 
      			// 操作2
      		else 
      			// 操作3
      	end 
      
    • 7、循环执行
      • 7.0 写在前面
        • 无论那种循环,都是在存储过程或存储函数中,不能直接编写的
      • 7.1 while … do 基本语法
        	// 特别注意: 结束条件,一定要明确,否则很容死循环。
        	while 条件 do
        		 循环体
        	end while
        
        	// 写个测试用例:求前n项的和
        	// 创建存储过程
        	create procedure sum(a int)
        	begin
        		declare sum int default 0;
        		declare i int default 1;
        		
        	   while i <= a do
        	   		set sum = sum +  i;
        	   		set i=i+1;
        	   end while;
        	   // 返回结果
        	   select sum;
        	end;
        	
        	// 调用存储过程
        	call sum(100);
        	// 删除存储过程
        	drop procedure if exists sum;
        
      • 7.2 loop 基本语法
      • 7.3 repeat基本语法
  • 二、写在最后
    以上内容仅供参考学习,如果错误请批评指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值