造數背景
主要造出一張時間字段的相關的數據,時間字段不能是一個固定值,數據範圍需要隨機分散在90天內的。
構建測試表
-- 測試表結構
CREATE TABLE `demo`.`order_info` (
`ID` bigint NOT NULL AUTO_INCREMENT COMMENT '自增ID主鍵',
`ORDER_NO` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '訂單編號',
`GOODS_ID` int DEFAULT NULL COMMENT '商品編號',
`USER_ID` bigint DEFAULT NULL COMMENT '用戶ID',
`ORDER_AMOUNT` decimal(14,2) DEFAULT NULL COMMENT '訂單金額',
`CREATE_DATE` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '訂單創建時間',
`MODIFY_DATE` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '訂單修改時間',
PRIMARY KEY (`ID`),
UNIQUE KEY `UK_ORDER_NO` (`ORDER_NO`),
KEY `NK_MODIFY_DATE` (`MODIFY_DATE`)
);
構建插數存儲過程
- 其中ID自增無需指定字段插入
- 訂單編號生成唯一值
- 商品編號和用戶ID均隨機生成,允許生成重複值
- 商品金額隨機,保留2位小數
- 創建時間取當前時間減去90天,這個值可根據實際情況調整,一般與修改時間保持聯動
- 修改時間取90天內任意值,這個值可根據實際情況調整,一般與創建時間保持聯動
-- 插入數據的存儲過程
delimiter ;;
create procedure proc_insert_order_data(in n int)
begin
declare i int;
set i=1;
while(i<=n)do
insert into demo.order_info(ORDER_NO,GOODS_ID,USER_ID,ORDER_AMOUNT,CREATE_DATE,MODIFY_DATE) select concat('NET_',uuid_short()) as order_no,
rpad(floor(rand()*1000),6,0) as GOODS_ID,
rpad(floor(rand()*100000),8,0) as USER_ID,
round(rand()*1000,2) as ORDER_AMOUNT,
date_SUB(now(),interval 90 day) as CREATE_DATE,
DATE_SUB(now(),interval floor(rand()*90) day) as MODIFY_DATE;
set i=i+1;
end while;
end;;
delimiter ;
根據需要的數據量指定插數
-- 調用存儲過程插入需要的數據量
call proc_insert_order_data(100000);
-- 生成的數據示例
select * from order_info limit 10;
+----+--------------------------+----------+----------+--------------+---------------------+---------------------+
| ID | ORDER_NO | GOODS_ID | USER_ID | ORDER_AMOUNT | CREATE_DATE | MODIFY_DATE |
+----+--------------------------+----------+----------+--------------+---------------------+---------------------+
| 1 | NET_10764588660109082634 | 658000 | 10694000 | 558.76 | 2022-08-28 11:43:16 | 2022-10-15 11:43:16 |
| 2 | NET_10764588660109082635 | 688000 | 24510000 | 56.45 | 2022-08-28 11:43:38 | 2022-11-08 11:43:38 |
| 3 | NET_10764588660109082636 | 874000 | 74479000 | 101.42 | 2022-08-28 11:43:38 | 2022-11-02 11:43:38 |
| 4 | NET_10764588660109082637 | 590000 | 47827000 | 213.53 | 2022-08-28 11:43:38 | 2022-10-01 11:43:38 |
| 5 | NET_10764588660109082638 | 523000 | 71922000 | 25.52 | 2022-08-28 11:43:38 | 2022-08-31 11:43:38 |
| 6 | NET_10764588660109082639 | 772000 | 95517000 | 456.94 | 2022-08-28 11:43:38 | 2022-10-20 11:43:38 |
| 7 | NET_10764588660109082640 | 724000 | 36747000 | 662.40 | 2022-08-28 11:43:38 | 2022-11-08 11:43:38 |
| 8 | NET_10764588660109082641 | 600000 | 67484000 | 192.07 | 2022-08-28 11:43:38 | 2022-09-03 11:43:38 |
| 9 | NET_10764588660109082642 | 102000 | 70681000 | 225.51 | 2022-08-28 11:43:38 | 2022-11-26 11:43:38 |
| 10 | NET_10764588660109082643 | 359000 | 77415000 | 793.43 | 2022-08-28 11:43:38 | 2022-09-29 11:43:38 |
+----+--------------------------+----------+----------+--------------+---------------------+---------------------+