`

在MySql中利用insert into select准备测试数据

阅读更多

        需求是我想重复插入大量数据,那么首先想到的,就是用insert into select语句。首先将当前表的数据备份。

create table table_name_bak as select * from table_name;

        然后,从备表中的数据往原表中新增,写了个存储过程如下:

drop procedure if exists initTestData;

DELIMITER //
create procedure initTestData()
begin
    declare i int default 1;
    while(i<=100) do
		insert into table_name
		select
		   replace(uuid(), '-',''),
		   CONCAT(FLOOR(2010 + (RAND() * 5)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(1 + (RAND() * 28)),2,0), ' ', LPAD(FLOOR(0 + (RAND() * 24)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0)),
		   update_time
		from table_name_bak;
	set i=i+1;
    END while;
END  //

        调用此存储过程。

##调用此存储过程
call initTestData();

 

特别说明:

        1.主键冲突用replace(uuid(), '-','')生成”表内”的唯一值解决。

        2.因业务测试点需要时间是随机的,至少不要是一样的,以能模拟生产环境的数据,特用CONCAT(FLOOR(2010 + (RAND() * 5)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(1 + (RAND() * 28)),2,0), ' ', LPAD(FLOOR(0 + (RAND() * 24)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0))随机生成2010年到2015年之间的日期数据。

 

附:mySql取某个范围内随机日期FLOOR和LPAD

#取7到12的随机整数,包括7到12
SELECT FLOOR(7 + (RAND() * 6));

#取12到24的随机整数,包括12到24
SELECT FLOOR(12+(rand()*13));

#取0-23之间的随机数,包括0到23
SELECT FLOOR(0 + (RAND() * 23));

#LPAD(str,len,padstr),返回字符串str,左填充用字符串padstr填补到len字符长度。 如果str为大于len长,返回值被缩短至len个字符(即,不能超过 len 长)
SELECT LPAD('HI', 4 , '?'); #运行结果:??HI
SELECT LPAD('HELLO', 4 , '?'); #运行结果:HELL

#取0-24之间的随机数,不够2位的前补0
SELECT LPAD(FLOOR(0 + (RAND() * 23)),2,0);

#获取一个随机日期,年份为2000-2015
select CONCAT(FLOOR(2000 + (RAND() * 16)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(3 + (RAND() * 28)),2,0));

#获取一个随机时间
select CONCAT(LPAD(FLOOR(0 + (RAND() * 24)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0));

#获取一个年份在2000-2016年之间的一个随机时间,格式为:yyyy-MM-dd hh24:mi:ss
select CONCAT(FLOOR(2000 + (RAND() * 16)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(3 + (RAND() * 28)),2,0), ' ', LPAD(FLOOR(0 + (RAND() * 24)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0));

 

附:表字段太多处理方法

1.先进入数据库,执行show create table table_name;
2.把表的所有字段复制
3.退出数据库,创建一个临时文件,将复制内容保存到这个临时文件中
4.用Linux命令处理字段为逗号分隔,cat file_name | awk -F '`' '{print $2}' | tr '\n' ','
5.根据如下原始SQL和逗号分隔的字段,组织SQL:insert into table_name() select from table_name_bak;
6.修改表名、贴上字段,最后用replace(uuid(), '-','')替换主键、唯一索引字段值,用CONCAT(FLOOR(2010 + (RAND() * 5)),'-',LPAD(FLOOR(1 + (RAND() * 12)),2,0),'-',LPAD(FLOOR(1 + (RAND() * 28)),2,0), ' ', LPAD(FLOOR(0 + (RAND() * 24)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0),':',LPAD(FLOOR(0 + (RAND() * 60)),2,0))替换要替换的时间字段值。

 

参考文章:http://blog.csdn.net/angus_17/article/details/8020833

分享到:
评论

相关推荐

    mysql测试数据新闻数据城市数据

    在这个场景中,"mysql测试数据新闻数据城市数据"可能指的是一个用来测试MySQL数据库性能或者功能的样本数据集,包含了新闻和城市相关的信息。这个数据集通常包含各种表,比如新闻表和城市表,用于模拟真实世界的业务...

    MySQL 关于表复制 insert into 语法的详细介绍

    下面我以mysql数据库为例分情况一一说明:两张表:insertTest和insertTest2,前者中有测试数据 代码如下:create table insertTest(id int(4),name varchar(12));insert into insertTest values(100,‘liudehua’);...

    MySql练习4:插入测试数据.zip

    在这个"MySQL练习4:插入测试数据"的压缩包中,很显然,包含的是一个或多个SQL脚本或者数据文件,用于在MySQL数据库中创建表格并填充测试数据。 首先,我们需要了解如何在MySQL中插入数据。基本的INSERT INTO语句...

    SQLServer导出为Insert语句

    在SQL Server中,可以使用多种工具或T-SQL语句来导出数据,例如`bcp`命令行工具,`SELECT INTO`语句,或者使用SSMS(SQL Server Management Studio)的“任务”&gt;“生成脚本”功能。 4. **Insert语句**:在SQL中,...

    数据库表导出insert语句工具

    在IT行业中,数据库管理是至关重要的任务之一,而“数据库表导出insert语句工具”是一种实用的数据库管理辅助工具,特别适用于数据迁移、备份或测试环境的数据填充。本文将详细探讨这种工具及其与MySQL数据库的关系...

    mysql 动态生成测试数据

    在实际开发中,测试数据的准备是一个非常重要的步骤,因为测试数据的质量直接影响着测试结果的可靠性和准确性。因此,需要一个快速生成测试数据的方法,以满足测试需求。 描述解释 MySQL 动态生成测试数据的语句...

    导出SQL数据为Insert语句

    在IT行业中,数据库管理和数据迁移是常见的任务,而“导出SQL数据为Insert语句”是一种常用的方法,便于数据备份、迁移或测试环境的搭建。本文将深入探讨这个主题,介绍如何将数据库中的数据转换为Insert语句,并...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    查询数据是指从数据库中的数据表或视图中获取所需要的数据,在mysql中,可以使用SELECT语句来查询数据。根据查询条件的不同,数据库系统会找到不同的数据。 SELECT语句的基本语法格式如下: [sql] view plain copy ...

    mysql 与word和excel互导数据

    创建测试数据表** 为了演示如何将MySQL中的数据导出到Excel中,首先需要创建一个简单的数据表并插入一些数据。以下是创建数据表及插入数据的SQL语句: ```sql CREATE TABLE users ( username VARCHAR(40) NOT ...

    如何优化MySQL insert性能

    在优化MySQL的INSERT性能时,面对大量数据的系统,我们需要考虑如何有效地减少插入时间,以降低潜在的风险和提高系统的稳定性。以下是一些经过测试的有效策略: 1. **批量插入**: - 传统的方式是逐行插入数据,...

    多级数据-Mysql中的递归层次查询(父子查询).doc

    递归层次查询(父子查询)在 MySQL 中的实现 在 MySQL 中,实现递归层次查询(父子查询)是一种复杂的操作,特别是当我们需要查询某个节点下的所有节点或节点上的所有父节点时。 Oracle 中有 Hierarchical Queries ...

    auto insert_Table_database_MYSQL_

    描述中提到的“looping procedure for insert into table”意味着我们要探讨的是如何使用循环结构在数据库的表中插入数据。在数据库管理中,当需要将大量数据插入同一个表时,使用循环可以避免手动编写多条INSERT...

    sql server数据导入mysql方案

    SELECT * INTO testMySQl.dbo.apply FROM OPENQUERY (MySQLtest ,'select * from milestone.apply') ``` - 注意,这种方式适用于单表迁移,如果需要迁移分片表,需要手动编写插入语句。 **二、通过SqlYong工具...

    MySql数据导入导出

    在日常维护与管理MySQL数据库的过程中,数据的导入导出是一项基本且重要的操作。本文将详细介绍MySQL数据导入导出的几种常见方式及其应用场景。 #### 二、数据导入导出的重要性 数据导入导出对于数据库管理和迁移...

    mysql数据库安装及测试

    ### MySQL 数据库安装与测试详解 #### 一、MySQL 数据库简介 MySQL 是一款非常流行的开源关系型数据库管理系统,因其高性能、稳定性和易用性而被广泛应用于各种规模的应用程序中。MySQL 支持多种操作系统,包括 ...

    MySQL中文参考手册.chm

    5.1 MySQL对ANSI SQL92 的扩充 5.2 以ANSI模式运行 MySQL 5.3 MySQL相比ANSI SQL92的差别 5.4 MySQL 缺乏的功能 5.4.1 子选择(Sub-selects) 5.4.2 SELECT INTO TABLE 5.4.3 事务...

    MySQL表数据迁移

    在MySQL中,有多种方法可以实现数据迁移,例如使用mysqldump命令行工具,或者利用SQL语句进行INSERT INTO SELECT操作。 对于"datamove",由于它仅支持MySQL,我们假设它可能提供以下功能: 1. **备份与恢复**:...

    VC++MySql数据库测试

    总之,"VC++ MySQL数据库测试"项目是学习如何在C++环境中利用MySQL数据库进行数据管理的一个实例。它涉及到数据库连接、SQL语句的执行、结果处理等多个关键知识点,对于理解C++与数据库的集成具有重要的实践价值。...

    Mysql中文汉字转拼音的实现(每个汉字转换全拼)

    在MySQL中实现中文汉字转拼音的功能,主要是为了方便在数据库查询和数据分析时处理中文文本,尤其是在没有全文索引或者需要进行复杂模糊匹配时。以下是一个简单的实现方法,它利用自定义函数来完成这一任务。 首先...

Global site tag (gtag.js) - Google Analytics