这篇分享个自己写的一个实用的脚本给大家。
最近新开发一套系统,需要建立数据库,数据表文档已经写好,需要建立数据库。看图:

这套系统大概有十几个这样的数据表,每个表的字段类型、长度、描述都需要填写,算是一个重复工作,想到可以写个小脚本,自动生成创建表结构。生成结果看下面代码
CREATE TABLE `admin_financial` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`portId` varchar(50) NOT NULL COMMENT '端口id',
`weixinId` varchar(50) NOT NULL COMMENT '原始ID',
`name` varchar(50) NOT NULL COMMENT '公众号名',
`opUser` varchar(50) NOT NULL COMMENT '操作者',
`companyName` varchar(50) NOT NULL COMMENT '企业名称',
`sum` int(11) NOT NULL COMMENT '金额(分)',
`type` int(11) NOT NULL COMMENT '操作类型',
`accountType` int(11) NOT NULL COMMENT '账户类型',
`time` timestamp NOT NULL COMMENT '时间',
`billNo` varchar(50) NOT NULL COMMENT '账单编号',
`status` int(11) NOT NULL COMMENT '状态',
`dstAccountId` varchar(50) NOT NULL COMMENT '目标账户',
`dstAccountType` int(11) NOT NULL COMMENT '目标账户类型',
`dstAuthAccount` varchar(50) NOT NULL COMMENT '目标授权账户',
`dstSubAccount` int(11) NOT NULL COMMENT '目标子账户',
`srcAccountId` varchar(50) NOT NULL COMMENT '来源账户',
`srcAccountType` int(11) NOT NULL COMMENT '来源账户类型',
`srcAuthAccount` varchar(50) NOT NULL COMMENT '来源授权账户',
`srcSubAccount` int(11) NOT NULL COMMENT '来源子账户',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='财务记录表';这里我使用了unix* 系统都可以跑的shell 来写。主要用到awk 命令。
首先建立个源数据文件,用来放文档格式。我这里复制文档的格式是这样。
portId 端口id String spid15e226338b
weixinId 原始ID String gh_94415782f4da
name 公众号名 String xxx
opUser 操作者 String xxx
companyName 企业名称 String 信息技术有限公司
sum 金额(分) Int 5020(50.2元)
type 操作类型 Int 1:转账;2.退款
accountType 账户类型 Int 3:赠送;4:现金;14:信用金固定
time 时间 Date 2018-06-01 00:11:22
billNo 账单编号 String xxxx
status 状态 Int 1
dstAccountId 目标账户 String spid15e226338b
dstAccountType 目标账户类型 Int spid15e226338b
dstAuthAccount 目标授权账户 String
dstSubAccount 目标子账户 Int 14
srcAccountId 来源账户 String spid15e226338b
srcAccountType 来源账户类型 Int spid15e226338b
srcAuthAccount 来源授权账户 String
srcSubAccount 来源子账户 Int 14然后写脚本
#!/bin/bash
# author:Magic
# url:www.bmob.cn
# table="default_table"
if [ -n "$1" ]; then
table=$1
else
table="default_table"
fi
if [ -n "$2" ]; then
comment=$2
else
comment = ""
fi
cat dx.txt |awk -F " " '
BEGIN{count=0; table= "'$table'";comment="'$comment'"} {name[count] = $1;c[count] = $2;
t[count]=$3;count++;};
END{
print "CREATE TABLE `" table "` ("
print "`id` int(11) unsigned NOT NULL AUTO_INCREMENT,"
for (i = 0; i < NR; i++){
printf "`"name[i]"` "
if(t[i]=="Int"){
printf "int("11") "
}else if(t[i]=="String"){
printf "varchar("50") "
}else if(t[i]=="Date"){
printf "timestamp NULL "
}else if(t[i]=="Float"){
printf "float(10,4) "
}
printf "NOT NULL"
print " COMMENT \""c[i]"\","
}
print "PRIMARY KEY (`id`)"
print ") ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT= \""comment"\";"
}'
如何执行:
命令行执行 sh db.sh tableName 财务表
* sh 执行shell
* db.sh 脚本名称
* tableName 表名称
* 财务表 描述效果截图
这样就可以实现复制文档表,然后就生成SQL,如果需要最后去数据库手动设置下索引,这样就完美快速的基于文档,生成Sql结构,大家有更好的方法,也可以一起交流。
评论 (0)