mysql - 从列表中插入随机数据
问题描述
这些是我的表格列:
ID || Date || Description || Priority
我的目标是插入 2000 行的随机测试数据,日期范围在(2019 年 7 月 1 日 - 2020 年 7 月 1 日)之间,并从列表(高、中、低)中随机化优先级。
我知道如何插入随机数,但我被日期和优先级字段卡住了。
如果我需要编写代码,有什么关于我该怎么做的指针吗?
只是想清楚一点-我在从给定列表中随机化和插入时遇到问题
解决方案
CREATE TABLE mytable (
id SERIAL PRIMARY KEY,
date DATE NOT NULL,
description TEXT,
priority ENUM('High','Medium','Low') NOT NULL
);
INSERT INTO mytable (date, priority)
SELECT '2019-07-01' + INTERVAL FLOOR(RAND()*365) DAY,
ELT(1+FLOOR(RAND()*3), 'High', 'Medium', 'Low')
FROM DUAL;
假表DUAL
是一个特殊的关键字。您可以从中进行选择,并且它始终只返回一行。但它没有包含数据的真实列,因此您只能选择表达式。
这样做 INSERT 几次,你会得到:
mysql> select * from mytable;
+----+------------+-------------+----------+
| id | date | description | priority |
+----+------------+-------------+----------+
| 1 | 2019-10-20 | NULL | Medium |
| 2 | 2020-05-17 | NULL | High |
| 3 | 2020-06-25 | NULL | Low |
| 4 | 2020-05-06 | NULL | Medium |
| 5 | 2019-09-30 | NULL | High |
| 6 | 2019-08-06 | NULL | Low |
| 7 | 2020-02-21 | NULL | High |
| 8 | 2019-11-10 | NULL | High |
| 9 | 2019-07-30 | NULL | High |
+----+------------+-------------+----------+
这里有一个技巧,使用表本身的行数来插入相同的行数,基本上是行数的两倍:
INSERT INTO mytable (date, priority)
SELECT '2019-07-01' + INTERVAL FLOOR(RAND()*365) DAY,
ELT(1+FLOOR(RAND()*3), 'High', 'Medium', 'Low')
FROM mytable;
只需更改FROM DUAL
为FROM mytable
I 从选择一行更改为从表中选择当前行数。但是我插入的值仍然是随机表达式,而不是那些行中已经存在的值。所以我得到带有新随机值的新行。
然后重复此 INSERT 多次,以使行数加倍。
另请阅读ELT() 函数。
推荐阅读
- xamarin.forms - 在 Android 中关闭 CustomTabs(xamarin 表单)时卡在空白屏幕上
- kotlin - 如何动态遍历kotlin中一个类的所有字段?
- robotframework - 应该是机器人框架中的 true 关键字
- docker - IBM Cloud docker dind 服务在 VPC 集群中不起作用
- php - 如何在 laravel 广播 channel.php 中获取房间 ID
- vue.js - 多张图片上传只附加Axios帖子中的最后一个数据,而不是每个数据
- typescript - TypeScript 和 NestJs:Spread 类型只能从对象类型创建
- python-3.x - 如何在字典列表中搜索python
- python - 如何使用 Python 的 MatPlotLib 根据时间安排我的情节?
- javascript - 如何打开新选项卡并重定向到链接 EXT JS portlet 按钮