前言
有时咱们须要增加很多测试的数据 在不应用Java的状况下 如何用SQL语句进行增加 ? 本文将讲述单层循环,双层循环,以及日期循环
单层循环
测试表代码
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 test_loop();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
要是能为您提供帮忙,请给予反对(关注、点赞
、分享),虫虫蟹蟹大家了!