添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

构造两个临时表 一个5一个10,通过笛卡尔积可以构造50行记录,即可构造50条记录

SELECT @xi:=@xi+1 as xc from 
			(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc1, 
			(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10) xc2,  
			(SELECT @xi:=0) xc0 
mysql>
mysql> SELECT @xi:=@xi+1 as xc from
    ->                  (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) xc1,
    ->                  (SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 U
SELECT 10) xc2,
    ->                  (SELECT @xi:=0) xc0 ;
+------+
| xc   |
+------+
|    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, 2 warnings (0.00 sec)
mysql>

二.存储过程的方法

写存储过程,这个就会方便很多

drop table t;
create table t(id int);
DELIMITER //
create procedure p_ins_seq(in pi_num int)
BEGIN
   declare l_n1 int default 1;
   truncate table t;
   while l_n1 <= pi_num DO  
     insert into t values (l_n1);
     set l_n1 = l_n1 + 1;
   end while;
end;
DELIMITER  ;
call p_ins_seq(50);
mysql>
mysql> drop table t;
Query OK, 0 rows affected (0.01 sec)
mysql> create table t(id int);
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql>
mysql> DELIMITER //
mysql> create procedure p_ins_seq(in pi_num int)
    -> BEGIN
    ->    declare l_n1 int default 1;
    ->    truncate table t;
    ->    while l_n1 <= pi_num DO
    ->      insert into t values (l_n1);
    ->      set l_n1 = l_n1 + 1;
    ->    end while;
    -> end;
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql> DELIMITER ;
mysql>
mysql>
mysql> call p_ins_seq(50);
Query OK, 1 row affected (0.14 sec)
mysql>
mysql> select * from t;
+------+
| id   |
+------+
|    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 8.0 With递归方法

MySQL 8.0开始支持with语法后,这个就大大的简便了

with recursive c(n) AS
select 1
union ALL
select n + 1
from c
where n < 50
select * from c;
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