【原创】MySQL 模拟PostgreSQL generate_series 表函数
PostgreSQL 提供了一个很强大的造数据的函数generate_series,基于Common Table Expression。
MySQL 没有复杂的应用程序类型,该如何实现这样的功能呢? 我想到的三种方法如下:
1. 用存储过程来做。 缺点是写好多数据库不擅长的应用逻辑。
2. 我们想到MySQL提供了SESSION 变量这样的特性, 可以很方便的完成同样的功能。
3. MariaDB 提供了一种sequence 引擎,也可以方便的做这件事情。
第一种我就不实现了, 我来举例说明后两种。
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
|
表结构如下:
ytt[love]>show create table test_series;
+ -------------+-------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+ -------------+-------------------------------------------------------------------------------------------------------------------------+
| test_series | CREATE TABLE `test_series` (
`id` int (11) NOT NULL ,
`log_date` date NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+ -------------+-------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
对应的PostgreSQL 运算结果:
t_girl=# insert into test_series select seq, current_date - '1 day' ::interval*seq from generate_series(1,20) as g(seq);
INSERT 0 20
t_girl=# select * from test_series;
id | log_date
----+------------
1 | 2014-03-02
2 | 2014-03-01
3 | 2014-02-28
4 | 2014-02-27
5 | 2014-02-26
6 | 2014-02-25
7 | 2014-02-24
8 | 2014-02-23
9 | 2014-02-22
10 | 2014-02-21
11 | 2014-02-20
12 | 2014-02-19
13 | 2014-02-18
14 | 2014-02-17
15 | 2014-02-16
16 | 2014-02-15
17 | 2014-02-14
18 | 2014-02-13
19 | 2014-02-12
20 | 2014-02-11
(20 rows )
|
第一: SESSION 变量。
MySQL 的SESSION 变量来变相实现的话,需要一个种子库。
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
51
52
53
|
以下存储过程生成种子库。
DELIMITER $$
USE `t_girl`$$
DROP PROCEDURE IF EXISTS `sp_seed`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_seed`(
IN f_num INT UNSIGNED
)
BEGIN
DROP TABLE IF EXISTS tmp_seed;
CREATE TEMPORARY TABLE tmp_seed (id INT );
BEGIN
DECLARE i INT ;
SET i = 1;
WHILE i <= f_num DO
INSERT INTO tmp_seed VALUES (i);
SET i = i + 1;
END WHILE;
END ;
END $$
DELIMITER ;
生成20个种子库
ytt[love]>call sp_seed(20);
Query OK, 1 row affected (0.15 sec)
现在利用刚才的种子库以及SESSION 变量来实现。
ytt[love]> insert into test_series select @a := @a + 1 as seq, date_sub( current_date (), interval @a day ) from tmp_seed,( select @a:=0) as seq;
Query OK, 20 rows affected (0.02 sec)
Records: 20 Duplicates: 0 Warnings: 0
ytt[love]> select * from test_series;
+ ----+------------+
| id | log_date |
+ ----+------------+
| 1 | 2014-03-02 |
| 2 | 2014-03-01 |
| 3 | 2014-02-28 |
| 4 | 2014-02-27 |
| 5 | 2014-02-26 |
| 6 | 2014-02-25 |
| 7 | 2014-02-24 |
| 8 | 2014-02-23 |
| 9 | 2014-02-22 |
| 10 | 2014-02-21 |
| 11 | 2014-02-20 |
| 12 | 2014-02-19 |
| 13 | 2014-02-18 |
| 14 | 2014-02-17 |
| 15 | 2014-02-16 |
| 16 | 2014-02-15 |
| 17 | 2014-02-14 |
| 18 | 2014-02-13 |
| 19 | 2014-02-12 |
| 20 | 2014-02-11 |
+ ----+------------+
20 rows in set (0.00 sec)
|
第二:
MySQL(MariaDB ) 提供了一个序列引擎,可以有这样的功能。
由于MySQL 没有表函数功能,所以如果要造多个字段的数据,就得用JOIN来实现了。
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
|
ytt[love]> insert into test_series select s1.seq,date_sub( current_date (),interval s2.seq day ) as date from seq_1_to_20 as s1, seq_1_to_20 as s2 where s1.seq = s2.seq;
Query OK, 20 rows affected (0.07 sec)
Records: 20 Duplicates: 0 Warnings: 0
ytt[love]> select * from test_series;
+ ----+------------+
| id | log_date |
+ ----+------------+
| 1 | 2014-03-02 |
| 2 | 2014-03-01 |
| 3 | 2014-02-28 |
| 4 | 2014-02-27 |
| 5 | 2014-02-26 |
| 6 | 2014-02-25 |
| 7 | 2014-02-24 |
| 8 | 2014-02-23 |
| 9 | 2014-02-22 |
| 10 | 2014-02-21 |
| 11 | 2014-02-20 |
| 12 | 2014-02-19 |
| 13 | 2014-02-18 |
| 14 | 2014-02-17 |
| 15 | 2014-02-16 |
| 16 | 2014-02-15 |
| 17 | 2014-02-14 |
| 18 | 2014-02-13 |
| 19 | 2014-02-12 |
| 20 | 2014-02-11 |
+ ----+------------+
20 rows in set (0.00 sec)
|
本文转自 david_yeung 51CTO博客,原文链接:http://blog.51cto.com/yueliangdao0608/1369057,如需转载请自行联系原作者
【原创】MySQL 模拟PostgreSQL generate_series 表函数相关推荐
- mysql 模拟序列_【原创】MySQL 模拟PostgreSQL generate_series 表函数
PostgreSQL 提供了一个很强大的造数据的函数generate_series,基于Common Table Expression. MySQL 没有复杂的应用程序类型,该如何实现这样的功能呢? ...
- mysql反三角函数,PostgreSQL中的函数之数学函数(正弦函数、反正弦函数、余弦函数、反余弦函数)...
在PostgreSQL的数学函数中,也包括了几个三角函数:正弦函数.反正弦函数.余弦函数.反余弦函数. 1. 正弦函数:SIN(x) SIN(x) SIN(x)会返回x的正弦值,x为弧度. 例如,使用 ...
- oracle sql now函数,SQL Server,MySQL,Oracle,PostgreSQL中常用函数用法(1)日
练习使用Hibernate没有用MySQL数据库,而是用了前不久接触的PostgreSQL,由于不同的数据对于相同的操作有各自的函数,MySQL的date_format(),在PostgreSQL中是 ...
- postgresql导入mysql_【原创】MySQL和PostgreSQL 导入数据对比
在虚拟机上测评了下MySQL 和 PostgreSQL 的各种LOAD FILE方式以及时间. 因为是虚拟机上的测评,所以时间只做参考,不要太较真, 看看就好了. MySQL 工具: 1. 自带mys ...
- PostgreSQL定义返回表函数
PostgreSQL定义返回表函数 本文我们学习如何在PostgreSQL 开发返回表函数. 示例数据表 我们使用的示例数据库表为film,如下图所示: 示例1 第一个函数发挥所有满足条件film表记 ...
- 【原创】VBA学习笔记(300)VBA 很多工作表函数都只对1维数组有用,用2维数组上经常报错!
1 VBA 很多工作表函数,都只对一维数组有用,用2维数组上经常报错 很多工作表函数都不能对二维数组生效 有时候连错误值都不返回,直接代码中断) 2 举例1:join() 和 split() 函数 只 ...
- MySQL 和 PostgreSQL 对比
最近打算研究下几个开源的数据库,但是主要精力还是研究Oracle RDBMS. MySQL 和PostgreSQL 是开源中用的最多的2个. 从网上搜了点资料. 整理如下. 这些资料也是以前的资料, ...
- mysql longtext db2_从 MySQL 或 PostgreSQL 迁移到 DB2 Express-C
从 MySQL 或 PostgreSQL 迁移到 DB2 Express-C 用三个简单步骤迁移到 DB2 Vikram Khatri, Nora Sokolof, 和 Manas Dadarkar ...
- 在MySQL和PostgreSQL之外,为什么阿里要研发HybridDB数据库?
编者按 \\ 在大数据火遍IT界之前,大家对数据信息的挖掘通常聚焦在BI(Business Intelligence)之上.BI具有着明确的分析需求,清晰地知道需要处理哪些信息,并且如何最终获得多维度 ...
- MySQL和PostgreSQL数据库安全配置
shewey · 2016/05/26 16:40 0x00 MySQL和PostgreSQL安全配置 针对开源数据库MySQL和PostgreSQL的安全配置主要主要通过身份鉴别.访问控制.安全审计 ...
最新文章
- Udacity机器人软件工程师课程笔记(七)-ROS介绍和Turtlesim包的使用
- linux使用vim浏览python源码
- Linux日志系统-03:logrotate主配置文件详解
- java格式_JAVA语言格式
- 我那么拼命,为什么还会被裁掉?
- emWin智能家居主界面设计,含uCOS-III和FreeRTOS两个版本
- padding三个值含义
- ES索引管理工具curator安装
- iOS开发之更改状态栏字体颜色
- 如何解决生活中的那些“不爽”和“意外”
- matlab元胞数组
- 十九种Elasticsearch字符串搜索方式终极介绍
- linux下route未找到命令
- Java查询Mysql数据库时区问题(相差13/14)个小时
- grpc系列1-K8S集群,VIP,grpc._channel._InactiveRpcError connection reset by peer解决方案 Paddleserving服务化部署
- 计算机网络微课笔记03
- javaScript中值传递和引用传递
- 12312312312332
- 资产管理之RFID资产管理系统解决方案-RFID资产智能盘点-新导智能
- L2-3 小A爱旅游 (25 分)