十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
用shell脚本通过while循环批量生成mysql测试数据的方法。
创新互联专业为企业提供天桥网站建设、天桥做网站、天桥网站设计、天桥网站制作等企业网站建设、网页设计与制作、天桥企业网站模板建站服务,十多年天桥做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
1、很多时候需要在mysql表中插入大量测试数据,下面分享一个用shell脚本通过while循环批量生成mysql测试数据的方法,你只需要根据你自己的表结构来生成sql语句即可。
复制代码代码如下:
#!/bin/bash
i=1;
MAX_INSERT_ROW_COUNT=$1;
while [ $i -le $MAX_INSERT_ROW_COUNT ]
do
mysql -uroot -proot afs -e "insert into afs_test (name,age,createTime) values ('HELLO$i',$i % 99,NOW());"
d=$(date +%M-%d\ %H\:%m\:%S)
echo "INSERT HELLO $i @@ $d"
i=$(($i+1))
sleep 0.05
done
exit 0
2、假定上面的shell脚本保存为create-data.sh,可以通过下面的命令来生成数据:
复制代码代码如下:sh create-data.sh 10000。(参数10000是要生成的数据条数。)
mysql一千万数据插入另外一个表的方法:
1、INSERTINTO目标表SELECT*FROM来源表;2、例如,要将articles表插入到newArticles表中,则可以通过如下SQL语句实现3、INSERTINTOnewArticlesSELECT*FROMarticles。
这里以前面新建的 teacher 表为例, teacher 表的字段为 name、age、id_number,向教师表新增一条数据命令如下:
执行下上面的这条命令,执行结果如下图:
其中 “INSERT INTO” 关键字表示这条命令是插入数据命令,“teacher” 是要插入数据的目标数据表名称,“name,age,id_number” 是表的字段名,“VALUES” 后面跟的是字段对应的值,值的顺序和前面字段的顺序一致。
上面介绍了如何向数据表插入一条数据,这里需要查看数据表已有的所有数据:
执行结果如下图:
“SELECT” 关键字表示这条命令是查询相关命令,"*" 则代表要查询出表中所有的数据。“FROM teacher” 则表明要查询的是哪一个数据表。
关于 SELECT 查询语句还有很多中使用场景,比如我们要查询出表中 age 字段的值大于 20 岁的数据。关于 SELECT 的其他使用我们会在后面的小节详细讲解。
新增多条数据命令:
执行结果如下图:
本小节介绍了如图向数据表插入一条数据、查询表所有数据、向表插入多条数据。前面介绍数据表的设计规范时介绍了数据表的第二设计范式要求所有数据表需要有业务主键。需要注意的是本节中 teacher 表的业务主键为自增 id,因此插入数据的时候不需要插入 id 字段的值。id 字段的默认是从 1 开始自增的,也可以指定自增起始值,如下建表语句,id自增值是从100开始的:
其中 “AUTO_INCREMENT=100” 表示自增主键 id 的值默认从 100 开始自增加的。
本节介绍数据的插入,复制数据到另一张表的Sql语法,主要语法有: insert into,insert into select,select into from 等用法,下面将一一为大家详细说明:
以下面两张表进行sql脚本说明
insert into有两种语法,分别如下:
语法1:INSERT INTO table_name VALUES (value1,value2,value3,...); --这种形式无需指定要插入数据的列名,只需提供被插入的值即可:
语法2:INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...); --这种形式需指定要插入数据的列名,插入的值需要和列名一一对应:
eg:insert into customer values('1006','14006','王欣欣','27','深圳市'); --向表customer插入一条数据
eg:insert into customer values('1007','14007','孟一凡','27',''); --向表customer插入一条数据,最后一个值不填表示对应的值为空,非必填项可以不用插入值
eg:insert into customer (cus_id,cus_no,cus_name,cus_age,cus_adds) values('1008','14008','孔凡','26','广州市'); --向表customer插入一条数据,插入的值与列名一一对应
详解:insert into select --表示从一个表复制数据,然后把数据插入到一个已存在的表中。目标表中任何已存在的行都不会受影响。
语法1:INSERT INTO table_name2 SELECT * FROM table_name1; --表示将表table_name1中复制所有列的数据插入到已存在的表table_name2中。被插入数据的表为table_name2,切记不要记混了。
eg:insert into customer select * from asett --将表asett中所有列的数据插入到表customer中
语法2:INSERT INTO table_name2 (column_name(s)) SELECT column_name(s) FROM table_name1; --指定需要复制的列,只复制制定的列插入到另一个已存在的表table_name2中:
eg:insert into customer (cus_id,cus_no) select ast_id,ast_no from asett --将表asett中列ast_id和ast_no的数据插入到表customer对应的cus_id,cus_no列中
详解:从一个表复制数据,然后把数据插入到另一个新表中。
语法1:SELECT * INTO newtable [IN externaldb] FROM table1; --复制所有的列插入到新表中:
eg:select * into customer from asett --将asett表中数据插入到customer中,被插入的 表customer不存在
eg:select * into customer from asett where ast_id = '1008' --只复制表asett中ast_id=1008的数据插入到customer中,被插入的 表customer不存在
语法2:SELECT column_name(s) INTO newtable [IN externaldb] FROM table1; --只复制指定的列插入到新表中:
eg:select ast_id,ast_no into customer from asett --将asett表中列ast_id,ast_no数据插入到customer中,被插入的 表customer不存在
区别1:insert into customer select * from asett where ast_id='1009' --插入一行,要求表customer 必须存在
区别2:select * into customer from asett where ast_id='1009' --也是插入一行,要求表customer 不存在
区别3:select into from :将查询出来的数据复制到一张新表中保存,表结构与查询结构一致。
区别4:insert into select :为已经存在的表批量添加新数据。