mysql 模擬序列_【原創】MySQL 模擬PostgreSQL generate_series 表函數

PostgreSQL 提供了一個很強大的造數據的函數generate_series,基于Common Table Expression。

MySQL 沒有復雜的應用程序類型,該如何實現這樣的功能呢? 我想到的三種方法如下:

1. 用存儲過程來做。 缺點是寫好多數據庫不擅長的應用邏輯。

2. 我們想到MySQL提供了SESSION 變量這樣的特性, 可以很方便的完成同樣的功能。

3. MariaDB 提供了一種sequence 引擎,也可以方便的做這件事情。

第一種我就不實現了, 我來舉例說明后兩種。

表結構如下:

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 變量來變相實現的話,需要一個種子庫。

以下存儲過程生成種子庫。

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來實現了。

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)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541481.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541481.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541481.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python字符串| isdigit()方法與示例

isdigit() is an in-built method in Python, which is used to check whether a string contains only digits or not. isdigit()是Python中的內置方法&#xff0c;用于檢查字符串是否僅包含數字。 Digit value contains all decimal characters and other digits which may …

vue2.0的學習

vue-router 除了使用 <router-link> 創建 a 標簽來定義導航鏈接&#xff0c;我們還可以借助 router 的實例方法&#xff0c;通過編寫代碼來實現。 1&#xff09;router.push(location) 這個方法會向 history 棧添加一個新的記錄&#xff0c;所以&#xff0c;當用戶點擊瀏…

mysql+url的配置參數詳解_MySql鏈接url參數詳解

mysql URL格式如下&#xff1a;jdbc:mysql://[host:port],[host:port].../[database][?參數名1][參數值1][&參數名2][參數值2]...MySQL在高版本需要指明是否進行SSL連接 在url后面加上 useSSLtrue 不然寫程序會有warning常用的幾個較為重要的參數&#xff1a;參數名…

Java LocalDate類| minus()方法與示例

LocalDate類isSupported()方法 (LocalDate Class isSupported() method) Syntax: 句法&#xff1a; public LocalDate minus(TemporalAmount t_amt);public LocalDate minus(long amt, TemporalUnit t_unit);isSupported() method is available in java.time package. isSuppo…

《Java EE 7精粹》—— 第3章 JSF 3.1 Facelets

本節書摘來異步社區《Java EE 7精粹》一書中的第2章&#xff0c;第2.1節&#xff0c;作者&#xff1a;【美】Arun Gupta&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 第3章 JSF JSF是基于Java的Web應用程序開發的服務器端用戶界面&#xff08;UI&#xf…

mysql5批處理_轉關于mysql5.5 的批處理討論(轉載)

MySql的JDBC驅動不支持批量操作(已結)MySql連接的url中要加rewriteBatchedStatements參數&#xff0c;例如String connectionUrl"jdbc:mysql://192.168.1.100:3306/test?rewriteBatchedStatementstrue";還要保證mysql JDBC驅的版本。MySql的JDBC驅動的批量插入操作性…

Java Duration類| isZero()方法與示例

持續時間類isZero()方法 (Duration Class isZero() method) isZero() method is available in java.time package. isZero()方法在java.time包中可用。 isZero() method is used to check whether this Duration object holds the value of length is 0 or not. isZero()方法用…

《C#多線程編程實戰(原書第2版)》——3.2 在線程池中調用委托

本節書摘來自華章出版社《C#多線程編程實戰&#xff08;原書第2版&#xff09;》一書中的第3章&#xff0c;第3.2節&#xff0c;作者&#xff08;美&#xff09;易格恩阿格佛溫&#xff08;Eugene Agafonov&#xff09;&#xff0c;黃博文 黃輝蘭 譯&#xff0c;更多章節內容可…

mysql語句數據庫_數據庫的Mysql語句

數據庫的mysql語句: 1.連接數據庫 mysql -u root -p2.顯示數據庫 show databases(db);3.選擇數據庫 use 數據庫名;4.顯示數據庫中的表 show tables;基本數據操作:增刪改查1.增 :insert into 表名(字段1,字段2…)values (值1,值2…);2.刪 :delete from 表名 where 條件;3.改 :up…

java clock計時_Java Clock類| systemUTC()方法與示例

java clock計時Clock Class systemUTC()方法 (Clock Class systemUTC() method) systemUTC() method is available in java.time package. systemUTC()方法在java.time包中可用。 systemUTC() method is used to get a Clock that implements the suitable system clock in the…

《Android 應用測試指南》——第2章,第2.4節包瀏覽器

本節書摘來自異步社區《Android 應用測試指南》一書中的第2章&#xff0c;第2.4節包瀏覽器&#xff0c;作者 【阿根廷】Diego Torres Milano&#xff08;迭戈 D.&#xff09;&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 2.4 包瀏覽器創建完前面提到的兩個…

操作系統系統調用_操作系統中的系統調用

操作系統系統調用系統調用簡介 (Introduction to System calls) The interface between the operating system and the user program is defined by the set of extended instruction that the operating system provides. These extended instructions are known as system ca…

java分數表示_表示Java分數的最佳方法?

小編典典碰巧的是不久前我寫了一個BigFraction類&#xff0c;用于解決Euler項目問題。它保留了BigInteger分子和分母&#xff0c;因此它將永遠不會溢出。但是&#xff0c;對于許多你永遠不會溢出的操作來說&#xff0c;這會有點慢。無論如何&#xff0c;請根據需要使用它。我一…

《OpenStack云計算實戰手冊(第2版)》——1.7 添加用戶

本節書摘來自異步社區《OpenStack云計算實戰手冊&#xff08;第2版&#xff09;》一書中的第1章&#xff0c;第1.7節,作者&#xff1a; 【英】Kevin Jackson , 【美】Cody Bunch 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 1.7 添加用戶 在OpenStack身份認證服務中…

開源軟件和自由軟件_自由和開源軟件的經濟學

開源軟件和自由軟件零邊際成本 (Zero Marginal Cost) At the core of the financial aspects of Free and Open Source is the zero negligible expense of merchandise in an environment that is digital. Right now, the rise of Free and Open Source speaks to an affirma…

java外部類_Java里什么叫內部類什么叫外部類

展開全部對普通類(沒有內部類的類)來說&#xff0c;62616964757a686964616fe78988e69d8331333337396234內部類和外部類都與他無關&#xff1b;對有內部類的類來說&#xff0c;它們就是其內部類的外部類&#xff0c;外部類是個相對的說法&#xff0c;其實就是有內部類的類。所以…

《精通Matlab數字圖像處理與識別》一6.2 傅立葉變換基礎知識

本節書摘來自異步社區《精通Matlab數字圖像處理與識別》一書中的第6章&#xff0c;第6.2節&#xff0c;作者 張錚 , 倪紅霞 , 苑春苗 , 楊立紅&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 6.2 傅立葉變換基礎知識 精通Matlab數字圖像處理與識別要理解傅立…

多線程循環輸出abcc++_C ++循環| 查找輸出程序| 套裝5

多線程循環輸出abccProgram 1: 程序1&#xff1a; #include <iostream>using namespace std;int main(){int num 15673;int R1 0, R2 0;do {R1 num % 10;R2 R2 * 10 R1;num num / 10;} while (num > 0);cout << R2 << " ";return 0;}Ou…

java oql_深入理解java虛擬機(八):java內存分析工具-MAT和OQL

以下內容翻譯自MAT幫助文檔。一、Class HistogramClass Histogram shows the classes found in the snapshot, the number of objects for each class, the heap memory consumption of these objects, and the minimum retained size of the objects二、Dominator treeDomina…

《Python數據分析與挖掘實戰》一1.2 從餐飲服務到數據挖掘

本節書摘來自華章出版社《Python數據分析與挖掘實戰》一書中的第1章&#xff0c;第1.2節&#xff0c;作者 張良均 王路 譚立云 蘇劍林&#xff0c;更多章節內容可以訪問云棲社區“華章計算機”公眾號查看 1.2 從餐飲服務到數據挖掘 企業經營最大的目的就是盈利&#xff0c;而餐…