在 MySQL 中循环插入测试数据

本贴最后更新于 1340 天前,其中的信息可能已经时移世改

题目

1.创建 sales_tab,该表存储了 2010-2011 年每月每天的销售额。
2.向 sales_tab 表中插入 1000 条测试数据。
1000 条随机数据,年的范围为 2010-2011 年,月范围为 1-12 月,日范围为 1-31 天,销售额的范围为 1 到 100(不包括 100)的随机浮点数。

建表 SQL:

CREATE TABLE sales_tab(
    year_id NUMERIC(10) NOT NULL,
    month_id NUMERIC(10) NOT NULL,
    day_id NUMERIC(10) NOT NULL,
    sales_value NUMERIC(10,2) NOT NULL
); -- Oracle MySQL 中都可用

插入测试数据:(Oracle 中语句)

INSERT INTO sales_tab 
    SELECT TRUNC(DBMS_RANDOM.VALUE(2010,2012)) AS year_id,
                 TRUNC(DBMS_RANDOM.VALUE(1, 13)) AS month_id,
                 TRUNC(DBMS_RANDOM, VALUE(1, 32)) AS day_id,
                 ROUND(DBMS_RANDOM, VALUE(1, 100), 2) AS sales_value
  FROM dual 
CONNECT BY level <= 1000; -- Oracle 中可用

如何在 MySQL 中实现

上述插入语句中无法在 MySQL 中使用,因为 MySQL 里没有几个函数,

  • TRUNC() 取整,
    在 MySQL 中同样功能的函数为:TRUNCATE(x,y),返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)
  • DBMS_RANDOM.VALUE() 生产随机数,在 MySQL 中如果想要使用,需要安装支持包。
    在 MySQL 中生成随机数可以使用:RAND() 返回 0 到 1 的随机数。  
    eg: eg: 7≤n≤12, TRUNCATE((7 + RAND() * 6), 0)
  • FROM dual 在 MySQL 中使用虚拟表 dual 比较麻烦。
  • ROUND(x) 函数, 返回离 x 最近的整数,Oracle 与 MySQL 中共用。
  • CONNECT BY 语句,MySQL 中暂时没有什么比较简单的替代方式。

至于循环插入,则可以通过编写 MySQL 的存储过程- PROCEDURE,循环执行插入语句实现。

SELECT CURRENT_USER(); -- 返回当前MySQL用户名:root@localhost
SELECT DATABASE(); -- 返回当前 MySQL 数据库名;lianxishujuku
SELECT dbms_random.VALUE FROM dual; -- Unknown table 'dbms_random' in field list
SELECT 2010 + TRUNCATE(RAND() * 3, 0); -- truncate(x, y) 直接截取小数点后y位的x

-- 使用存储过程,创建循环语句,执行 procedure 程序
DELIMITER $  -- 设定界定符从 ; 改为 $
CREATE PROCEDURE per() -- 创建匿名块
    BEGIN
    DECLARE i INT;
    SET i = 0;
    WHILE i < 1000 DO
        INSERT INTO sales_tab VALUES(TRUNCATE(2010 + RAND() * 3, 0), TRUNCATE(1 + RAND() * 12, 0), TRUNCATE(1 + RAND() * 32, 0), ROUND(1 + RAND() * 100, 2));
        SET i = i + 1;
        END WHILE;
    END $
DELIMITER ; -- 恢复隔离符为 ;
CALL per();  -- 调用匿名块,执行循环插入1000条数据
SELECT * FROM sales_tab;
SELECT COUNT(1) FROM sales_tab;

参考:Mysql 向表中循环插入数据
RUNOOB-MySQL 函数

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    675 引用 • 535 回帖 • 3 关注
  • SQL
    124 引用 • 296 回帖 • 3 关注
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    330 引用 • 614 回帖 • 2 关注
  • 笔记

    好记性不如烂笔头。

    305 引用 • 780 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
PeterChu
人生是场修行,求知是种信仰 ! 西安

推荐标签 标签

  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    330 引用 • 614 回帖 • 2 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    915 引用 • 931 回帖 • 1 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 180 关注
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    164 引用 • 1456 回帖
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 607 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 8 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 302 关注
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 628 关注
  • CAP

    CAP 指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可兼得。

    11 引用 • 5 回帖 • 567 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 455 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 604 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖 • 1 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 8 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 410 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖 • 32 关注
  • OnlyOffice
    4 引用 • 18 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 90 关注
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    122 引用 • 73 回帖
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 461 关注
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    9 引用 • 32 回帖 • 159 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    4 引用 • 55 回帖 • 11 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 522 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 351 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖 • 1 关注