在 MySQL 中循环插入测试数据

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

题目

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 回帖
  • SQL
    124 引用 • 296 回帖 • 3 关注
  • 数据库

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

    330 引用 • 614 回帖
  • 笔记

    好记性不如烂笔头。

    303 引用 • 777 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 511 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    5 引用 • 13 回帖
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 441 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    169 引用 • 799 回帖 • 1 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    103 引用 • 126 回帖 • 447 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 107 关注
  • 996
    13 引用 • 200 回帖 • 1 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 1 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 1 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 619 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 588 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 2 关注
  • CloudFoundry

    Cloud Foundry 是 VMware 推出的业界第一个开源 PaaS 云平台,它支持多种框架、语言、运行时环境、云平台及应用服务,使开发人员能够在几秒钟内进行应用程序的部署和扩展,无需担心任何基础架构的问题。

    5 引用 • 18 回帖 • 152 关注
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 53 关注
  • 自由行
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 290 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3168 引用 • 8207 回帖
  • NGINX

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

    311 引用 • 546 回帖 • 34 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    228 引用 • 1450 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    103 引用 • 294 回帖
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 39 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    10 引用 • 85 回帖
  • 安全

    安全永远都不是一个小问题。

    189 引用 • 813 回帖
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 741 关注