mysql> with recursive c(n) AS
-> select 1
-> union ALL
-> select n + 1
-> from c
-> where n < 50
-> select * from c;
+------+
| n |
+------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
| 14 |
| 15 |
| 16 |
| 17 |
| 18 |
| 19 |
| 20 |
| 21 |
| 22 |
| 23 |
| 24 |
| 25 |
| 26 |
| 27 |
| 28 |
| 29 |
| 30 |
| 31 |
| 32 |
| 33 |
| 34 |
| 35 |
| 36 |
| 37 |
| 38 |
| 39 |
| 40 |
| 41 |
| 42 |
| 43 |
| 44 |
| 45 |
| 46 |
| 47 |
| 48 |
| 49 |
| 50 |
+------+
50 rows in set (0.00 sec)
MySQL 使用过程当中,经常需要有连续数字的表用来处理一些复杂的报表逻辑,这个blog介绍几种生成连续数字的表方法如下,我需要生成一张表 id连续的从 1-50文章目录一.自定义变量的方法二.存储过程的方法三.MySQL 8.0 With递归方法一.自定义变量的方法构造两个临时表 一个5一个10,通过笛卡尔积可以构造50行记录,即可构造50条记录SELECT @xi:=@xi+1 as xc from (SELECT 1 UNION SELECT 2 UNION SELECT 3
mysql数据库生成连续的数字或者基于此生成连续的日期(5.7版本)
业务需要统计近24个月的平均数据,没有数据则补0,需要保证所有日期都有。之前在oracle可以直接根据rownub生成,在之前的文章里,mysql要麻烦一些,需要自定义变量,(数量控制类似乘法,5*5=25)如下
SELECT @xi:=@xi+1 as xc from
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5)...
今天在做oracle转mysql的时候遇到了一个小问题,需要查出1-100的连续数字处理一些逻辑,特此记录一下。在oracle中查询1-100的连续数字比较容易,可以借用dual表和level就可以快速简单实现。
那么问题来了,dual表是oracle的特性,mysql中没有dual表也没有level列,要如何实现呢?经过我一通百度,发现了一个需要利用业务表的方法:
1、先初始化rownum变量为0,且将这个一行一列的0作为一张临时表r(select @rownum:=0)
2、将r这个临时表与业务表相关联
English |
Datafaker是大型测试数据和流量测试数据生成工具。 它与python2.7和python3.4 +兼容。 欢迎下载和使用。 github地址是:
github上的文档同步更新
在软件开发测试过程中,经常需要测试数据。 这些方案包括:
后端开发。 创建新表后,您需要构造数据库测试数据并生成供前端使用的接口数据。
数据库性能测试。 生成大量测试数据以测试数据库性能
流数据测试。 对于kafka流数据,有必要连续生成测试数据以写入kafka。
经过研究,目前尚无用于在mysql表中生成结构相似的数据的开源测试
2、创建表 create table 表名(列及类型)
creat table student(id int auto_increment primary key,name varchar(20) not null,age int not null,gender bit default 1,address varchar(20), isDelete bit default 0)
3、删除表 drop table 表名;
4、查看表结构desc 表名;
5、查看建表语句show create table 表名;
5、重命名表名:
rename table 原表名 to 新表名;
6、修改表结构 alter table 表名 add|change|drop 列名 数据类型
7、数据修改:
1、增加数据:
a: 全列插入:insert into 表名 values(0,”lin”,”yellow”,200,0)
说明:主键是不用输入的,但是全列插入时要用0占位,实际以自动生成的为准
b:缺省插入:有默认值而却不需要添加时使用
Insert into 表名(列名1,列名2......) values(值1,值2.......)
C:多条插入:insert into 表名 values(值1,值2,。。),(值1,值2,。。。)
多条插入也支持缺省输入
2、删除数据
delete from 表名 where 条件;
delete from stu where id = 9;
没有条件是全部删除,慎用
a、from关键字后面是表名,表示数据来源于这个表
b、Select后面写表中的列名,如果是*表示在结果集中显示表中的所有列。
c、在select后面的列名部分,可以使用as为列名起别名,这个别名显示在结果集中,但是再用别名找找不到该列。
d、如果想查询多个列,之间用逗号分隔
2、消除重复行
在select后面列的前面使用distinct可以不显示重复的行
3、条件查寻
a、语法:
Select * from 表名 where 条件
B、比较运算符:
等于 = 大于> 小于 < 大于等于>= 小于等于<= 不等于!=或<>
b、逻辑运算符
And or not
C、模糊查寻
%表示任意多个字符
_表示一个任意字符
D、范围查询
In 表示在一个非连续的范围内
Between.......and.............表示在一个连续的范围内
需求:查询编号是8,10,12的数据
实例:select * from stu where id in (8,10,12);
需求:查询id在6-8的学生
E、空判断
注意null 与””不同
判断空:is null
判断非空:is not null
查询没有地址的同学;
Select * from stu where address is null;
e、优先级
小括号,not ,比较运算符 ,逻辑运算符,and比or优先级高,如果同时使用,建议使用();
为了快速得到统计的数据,提供了5个聚合函数
Select 函数() from 表名;
1、count(*) 表示计算总行数,()中可以写*或列名
2、max(列名) 表示求此列的最大值
3、min(列名) 表示求此列的最小值
4、sum(列名) 表示求此列的和
5、avg(列名) 表示求平均数值
需求:查询女生id的最大值:
需求:查看“l”开头的学生年龄和
分组是为了将分组后的数据通过聚合函数显示使用,按照字段进行分组,表示此字段相同的数据会被放到一个集合中
分组后,只能查询出相同的数据列,对于有差异的数据列,无法显示在结果集中,可以对分组后的数据进行聚合运算
语法 select 列1,列2,聚合.............From 表名 group by 列1,列2,........
需求,查询男生,女生分别有多少人
分组后的数据筛选语法 select 列1,列2,聚合.............From 表名 group by 列1,列2,........ having 列1,列2
语法:select * from 表名 order by 列1 asc|desc, 列2 asc|desc.....
A、将数据按照列1 进行排序,如果列1数据相同,则按照列2进行排序,.......
B、默认升序
C、Asc表示升序
D、Desc表示降序
如果需要筛选,where 条件要放在表名后面
Select * from stu limit srart count
八、关联:
建表语句:
1/create table class(id int auto_increment primary key,name varchar(20) not null ,stuNum int not null);
2/create table students(id int auto_increment primary key,name varchar(20) not null ,gender bit default 1,classid int not null,foreign key (classid) references class(id));
关联查询 select students.name,class.name from class inner join students on class.id = students.classid;
1、关联查询 select students.name,class.name from class inner join students on class.id = students.classid;
2、left join
会将A中有的填充到左边,没有用null填充
3,rightjoin
会将b中有填充到右边,没有用null填充
使用python写代码前,要退出mysql,要用pip install PyMySql添加库
最近在leetcode上刷题的时候,发现了一个比较有代表性的查询连续出现数字的问题。当然这个连续出现问题可以是很多,连续签到、连续登陆等。这个时候需要用到自连接,自连接也就是把一张表当两张表用。
比如这道题:
为了看起来舒服一些,我在自己的workbench上测试的时候没有用这张表,不过道理是一样的。
1、先建表
# 先建立一张试验用的表stu_score。
create table stu_score(id int not null, fenshu int not null,primary key(id));
insert into stu_score(id,fenshu) value(1