数据库循环
程序员文章站
2022-07-10 21:49:24
前言今天开始学数据库索引的写法以及实际效果 需要很多的数据 用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
要是能为您提供帮助,请给予支持(关注、点赞
、分享),虫虫蟹蟹大家了!
本文地址:https://blog.csdn.net/qq_49313444/article/details/107287478
上一篇: 荐 命令行方式操作MySQL数据库
下一篇: 小卖部爬窗买东西的时候
推荐阅读
-
mysql 开发进阶篇系列 26 数据库RPM安装演示
-
Spring boot中使用Spring-data-jpa方便快捷的访问数据库(推荐)
-
sqlserver replace函数 批量替换数据库中指定字段内指定字符串参考方法
-
为数据库生成某个字段充填随机数的存储过程
-
用Jena将本体文件存入MySQL数据库的实现方法
-
SQLServer 数据库故障修复*技巧之一
-
sqlserver 数据库被注入解决方案
-
sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】
-
Python的Tornado框架实现异步非阻塞访问数据库的示例
-
数据库中identity字段不必是系统产生的唯一值 性能优化方法(新招)