MySQL 练习

存储过程

创建下个月的每天对应的表user_2021_11_01、user_2021_11_02、...

需求描述:
我们需要用某个表记录很多数据,比如记录某某用户的搜索、购买行为(注意,此处是假设用数据库保存),当每天记录较多时,如果把所有数据都记录到一张表中太庞大,需要分表,我们的要求是,每天一张表,存当天的统计数据,就要求提前生产这些表--每个月创建下一个月每天的表!
 

-- 思路:循环构建表名 user_2021_11_01 到 user_2020_11_30;并执行create语句。
create database mydb18_proc_demo;
use mydb18_proc_demo;
drop procedure if exists proc22_demo;

delimiter $$
create procedure proc22_demo()
begin
	declare next_year int;  -- 下一个月的年份
	declare next_month int; -- 下一个月的月份
	declare next_month_day int;-- 下一个月最后一天的日期
		
	declare next_month_str varchar(2);  -- 下一个月的月份字符串
	declare next_month_day_str varchar(2);-- 下一个月的日字符串
	
	-- 处理每天的表名
	declare table_name_str varchar(10);
	
	declare t_index int default 1;
	-- declare create_table_sql varchar(200);
	
	-- 获取下个月的年份
	set next_year = year(date_add(now(),INTERVAL 1 month)); -- 2021
	-- 获取下个月是几月 
	set next_month = month(date_add(now(),INTERVAL 1 month)); -- 11
	-- 下个月最后一天是几号
	set next_month_day = dayofmonth(LAST_DAY(date_add(now(),INTERVAL 1 month))); -- 30
	
	if next_month < 10
		then set next_month_str = concat('0',next_month); -- 1  ---》 01
	else
		set next_month_str = concat('',next_month); -- 12
	end if;
	
	
	while t_index <= next_month_day do
		
		if (t_index < 10)
			then set next_month_day_str = concat('0',t_index);
		else
			set next_month_day_str = concat('',t_index);
		end if;
		
		-- 2021_11_01
		set table_name_str = concat(next_year,'_',next_month_str,'_',next_month_day_str);
		-- 拼接create sql语句
		set @create_table_sql = concat(
					'create table user_',
					table_name_str,
					'(`uid` INT ,`uname` varchar(50) ,`information` varchar(50)) COLLATE=\'utf8_general_ci\' ENGINE=InnoDB');
		-- FROM后面不能使用局部变量!
		prepare create_table_stmt FROM @create_table_sql;
		execute create_table_stmt;
		DEALLOCATE prepare create_table_stmt;
		
		set t_index = t_index + 1;
		
	end while;	
end $$

delimiter ;

call proc22_demo();

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值