数据库循环

   日期:2020-07-13     浏览:95    评论:0    
核心提示:前言今天开始学数据库索引的写法以及实际效果 需要很多的数据 用Java编写太麻烦了现在工具有Navicat Premium 于是我决定在上面使用循环添加数据单层循环测试表代码create table test(location_id int ,location_name varchar(10));再编写存储过程,其中涉及到循环的使用。我们欲通过这个存储过程,来达到往表中插入数据的效果drop procedure if exists insert_while;delimiter //cr

前言

今天开始学数据库索引的写法以及实际效果 需要很多的数据 用Java编写太麻烦了
现在工具有Navicat Premium 于是我决定在上面使用循环添加数据

单层循环

测试表代码

create table test(location_id int ,location_name varchar(10));

再编写存储过程,其中涉及到循环的使用。我们欲通过这个存储过程,来达到往表中插入数据的效果

drop procedure if exists insert_while;
delimiter //
create procedure insert_while()
begin
	declare i int default 1;
	while i<10
	do
		insert into test values(i,concat('bookworm',i));
		set i=i+1;
	end while;
	commit;
end //
delimiter ;

下面是输出结果:

mysql> select * from test;
Empty set (0.00 sec)

mysql> call insert_while();
Query OK, 0 rows affected (0.35 sec)

mysql> select * from test;
+-------------+---------------+
| location_id | location_name |
+-------------+---------------+
|           1 | bookworm1     |
|           2 | bookworm2     |
|           3 | bookworm3     |
|           4 | bookworm4     |
|           5 | bookworm5     |
|           6 | bookworm6     |
|           7 | bookworm7     |
|           8 | bookworm8     |
|           9 | bookworm9     |
+-------------+---------------+
9 rows in set (0.00 sec)

drop procedure if exists insert_while:如果存在函数insertwhile先删除它

delimiter //:将结束符定义为//在begin和end中会使用;如果不换程序会错误

create procedure:创建存储过程

delimiter ;结束符换回;号

双重循环

创建表

CREATE TABLE `dim_time` (
  `TimeKey` int(11) NOT NULL,
  `Hour` tinyint(4) DEFAULT NULL,
  `Minute` tinyint(4) DEFAULT NULL,
  PRIMARY KEY (`TimeKey`)
)

编写存储过程

drop procedure if exists insertValueIntoDimTime;
delimiter //
create procedure insertValueIntoDimTime()
begin
	declare hour int default 0;
	declare min int default 0;	
		while hour < 24
		do
			while min < 60
			do
				insert into dim_time values(hour*100+min,hour,min);
				set min=min+1;
			end while;
			set min = 0;
			set hour = hour+1;
		end while;
end //
delimiter ;

运行

mysql> call insertValueIntoDimTime;
Query OK, 1 row affected (22.12 sec)

结果

mysql> select count(*) from dim_time;
+----------+
| count(*) |
+----------+
|     1440 |
+----------+
1 row in set (0.02 sec)

mysql> select * from dim_time order by timekey limit 10;
+---------+------+--------+
| TimeKey | Hour | Minute |
+---------+------+--------+
|       0 |    0 |      0 |
|       1 |    0 |      1 |
|       2 |    0 |      2 |
|       3 |    0 |      3 |
|       4 |    0 |      4 |
|       5 |    0 |      5 |
|       6 |    0 |      6 |
|       7 |    0 |      7 |
|       8 |    0 |      8 |
|       9 |    0 |      9 |
+---------+------+--------+
10 rows in set (0.00 sec)

mysql> select * from dim_time order by timekey desc limit 10;
+---------+------+--------+
| TimeKey | Hour | Minute |
+---------+------+--------+
|    2359 |   23 |     59 |
|    2358 |   23 |     58 |
|    2357 |   23 |     57 |
|    2356 |   23 |     56 |
|    2355 |   23 |     55 |
|    2354 |   23 |     54 |
|    2353 |   23 |     53 |
|    2352 |   23 |     52 |
|    2351 |   23 |     51 |
|    2350 |   23 |     50 |
+---------+------+--------+
10 rows in set (0.00 sec)

日期循环

3.1 需求
今天需要从订单库中找出过去六个月的订单,所以需要写一个简单的日期循环,用于读取数据。

3.2实现

drop procedure if exists date_loop;

delimiter //
create procedure date_loop()
begin
    declare i int default 1;
	declare start_date date ;  -- 当前日子减去6个月
	declare end_date date ; -- 当前天
	
	select date_sub(current_date(),interval 6 month) into start_date;
	select current_date() into end_date;
	
    while start_date < end_date
    do
        select start_date;
        set start_date = date_add(start_date,interval 1 day);
    end while;
    commit;
end //
delimiter ;

date_sub(object,interval):从指定日期减去指定年,月,日,时,分,秒

object:

  • 必须
  • 规定一个由data_current()返回的DataTime的对象

interval:

  • 必须
  • 规定是一个interval对象

返回值:如果成功返回DataTime对象,如果失败返回false

要是能为您提供帮助,请给予支持(关注、点赞、分享),虫虫蟹蟹大家了!

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服