创建一个多列大表的几种方式

31 篇文章 0 订阅
25 篇文章 1 订阅

背景:

测试时,经常需要创建一些多列大表和加载大量数据,之前也临时写过很多脚本,但往往要马上用时,又一时半会儿写不出来(心里知道,但动手就是不行了),这里专门记录一下。

系统环境

mysql5.7.29
oracle11.2.0.4
postgresql11.2

创建多列大表的几种方式

1、通过shell脚本生成建表语句及数据
2、通过存储过程生成建表语句及数据

生成多列建表语句

第一种方式,通过shell脚本生成建表语句
#!/bin/bash
v_num= 1 e c h o " d r o p t a b l e i f e x i s t s a a ; " > c r e a t e t a b . s q l e c h o " c r e a t e t a b l e a a ( " > > c r e a t e t a b . s q l e c h o " c o l 1 i n t " > > c r e a t e t a b . s q l f o r ( ( i = 2 ; i < = 1 echo "drop table if exists aa;">create_tab.sql echo "create table aa (">> create_tab.sql echo "col1 int">> create_tab.sql for ((i=2;i<= 1echo"droptableifexistsaa;">createtab.sqlecho"createtableaa(">>createtab.sqlecho"col1int">>createtab.sqlfor((i=2;i<=v_num;i++))
do
echo “, col$i int”>>create_tab.sql
done
echo “);”>> create_tab.sql
./gen_table.sh 1000

执行建表语句

mysql在sql环境执行建表语句如下

source /opt/create_tab.sql

postgresql直接在命令行执行如下语句
psql -f /opt/create_tab.sql

oracle在sql环境执行下语句
oralce>@/opt/create_tab.sql

生成测试数据

[root@lineqi ~]# cat gen_data.sh
#!/bin/bash
v_num= 1 f o r ( ( i = 1 ; i < 1 for ((i=1;i< 1for((i=1;i<v_num;i++))
do
echo i , i, i,i,$i >>data.sql
done

加载测试数据到测试表

mysql在sql环境执行建表语句如下

load data infile ‘/opt/data.sql’ into table aa fields terminated by ‘,’;

postgresql直接在命令行执行如下语句
postgres=# copy aa (col1,col2,col3) from ‘/opt/data.sql’ DELIMITER ‘,’;
oracle在sql环境执行下语句
sqlldr user/password direct=true control=sqlldr.ctl parallel=true
sqlldr.ctl配置文件内存如下
OPTIONS (skip=1,rows=128) – sqlldr 命令显示的 选项可以写到这里边来,skip=1 用来跳过数据中的第一行
LOAD DATA
INFILE “/opt/data.sql” --指定外部数据文件,可以写多 个 INFILE “another_data_file.csv” 指定多个数据文件
–这里还可以使 用 BADFILE、DISCARDFILE 来指定坏数据和丢弃数据的文件,
truncate --操作类型,用 truncate table 来清除表中原有 记录
INTO TABLE aa – 要插入记录的表
Fields terminated by “,” – 数据中每行记录用 “,” 分隔
Optionally enclosed by ‘"’ – 数据中每个字段用 ‘"’ 框起,比如字段中有 “,” 分隔符时
trailing nullcols --表的字段没有对应的值时允 许为空
(
virtual_column FILLER, --这是一个虚拟字段,用来跳 过由 PL/SQL Developer 生成的第一列序号
col1 number, --字段可以指定类型,否则认 为是 CHARACTER 类型, log 文件中有显示
col2 number,
login_times,
last_login DATE “YYYY-MM-DD HH24:MI:SS” – 指定接受日期的格式,相当用 to_date() 函数转换
)

第二种:通过数据库的存储过程来多列大表的创建
mysql
生成多列大表
drop procedure if exists gen_table1;
create procedure gen_table1(cols int)
begin
declare i int default 1;
declare v_sql text;
set v_sql=“create table aa(”;
set v_sql=concat(v_sql,concat(concat(‘col’,i),’ int’));
set i=i+1;
while i<=cols do
set v_sql=concat(v_sql,concat(concat(’,col’,i),’ int’));
set i=i+1;
end while;
set v_sql=concat(v_sql,’)’);
set @exec_sql=v_sql;
prepare pp1 from @exec_sql;
execute pp1;
DEALLOCATE prepare pp1;
end;
call gen_table1(100);
批量生成数据
drop procedure if exists gen_data;
create procedure gen_data(rows int)
begin
declare i int default 1;
while i<=rows do
insert into aa(col1,col2,col3) values(i,i+1,i+2);
set i=i+1;
end while;
end;

call gen_data(1000);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值