shell脚本实现mysql数据库的增删改查操作

Posted 吴二喵

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本实现mysql数据库的增删改查操作相关的知识,希望对你有一定的参考价值。

一、shell脚本实现mysql操作

通用的shell语句如下:

mysql -h$HOSTNAME  -P$PORT  -u$USERNAME -p$PASSWORD -e "$sql" --default-character-set=UTF8 

1、HOSTNAME是主机名,通常是数据库的ip

2、PORT是端口号

3、USERNAME是用户名

4、PASSWORD是密码

5、通过写sql里面的语句可以执行相应的数据库操作,常用的是数据库的增删改查操作。

6、default-character-set是编码方式

我们通常也不会把数据库的连接信息直接写在程序中,而是写在配置文件中,如命名database.conf文件:

# 数据库 服务IP 服务端口 数据库用户 数据库密码

student 127.0.0.1 6614 root 1234

然后利用initDBinfo函数来获取数据库信息:

function initDBinfo()

HOSTNAME=`cat $dbconfPath | grep $1 | awk 'print $2'`
PORT=`cat $dbconfPath | grep $1 | awk 'print $3'`
USERNAME=`cat $dbconfPath | grep $1 | awk 'print $4'`
PASSWORD=`cat $dbconfPath | grep $1 | awk 'print $5'`


二、shell脚本实现数据库表的增删改查

2.1 数据库表的新增记录

#这里是实现文件入库记录插入到数据表中
#文件大小,以M为单位
fileSize=`ls -l $dataImportFile | awk 'print int($5/1024)'`
#文件行数
fileLineCount=`cat $dataImportFile|wc -l`
#文件接收时间
fileRecvTim=`stat $dataImportFile| grep Modify | awk 'print $2,$3' | cut -d"." -f1`
#数据库名
fileDBName="fileDB"
#表名
fileTableName="file_recv_info"
#字段列表
fileTableColumns="file_nam,file_size,file_line_ctn,file_recv_tim,file_hdl_rst"
#插入数据库操作
insert_file_record_sql="insert into $fileDBName.$fileTableName ($fileTableColumns) values ('$fileName',$fileSize,$fileLineCount,'$fileRecvTim','$fileHdlRst')"

2.2 文件数据导入数据库

#文件数据导入数据表
#dataImportFile表示导入文件名,IMPORTSTYLE表示导入方式,DBNAME表示数据库名,TABLENAME表示表名,
#columnSplitSeparator表示列分隔符,常见为,或者|等;rowSplitSeparator为行分隔符
import_data_sql="load data low_priority local infile '$dataImportFile' $IMPORTSTYLE into table $DBNAME.$TABLENAME
 fields terminated by '$columnSplitSeparator' lines terminated by '$rowSplitSeparator'"

 #通常行分隔符为\\n,linux中表示回车+换行符
 rowSplitSeparator="\\n"

2.3 删除数据库表操作

#这里是删除时间在某个时间段内的记录,实现数据库表的定期清理功能
#这里OTHERCONDITION可以在配置文件里面配置,添加额外的判断条件
#limit是限制一次删除的记录条数
clean_data_sql="delete from $DBNAME.$TABLENAME where $TIMECOLUMN between \\"$CLEAN_START_TIME\\" and \\"$CLEAN_END_TIME\\" and $OTHERCONDITION limit $CLEAN_NUM"

2.4 修改数据库表操作

#数据库更新操作,修改参数值
update_param_sql="update $DBNAME.$TABLENAME set param_val=\\"$paramVal\\" where param_key=\\"$paramKey\\" "
current_time=`date "+%Y-%m-%d %T"`
echo "$current_time Start to update table $DBNAME.$TABLENAME set paramVal equals $paramVal" >> $logFile
initDBinfo $DBNAME
mysql -h$HOSTNAME  -P$PORT  -u$USERNAME -p$PASSWORD -Nse "$update_param_sql" --default-character-set=UTF8; >> $logFile 2>&1

2.5 查询数据库表操作

#查询表中满足条件的记录条数
count_data_sql="select count(1) from $DBNAME.$TABLENAME where $TIMECOLUMN between \\"$CLEAN_START_TIME\\" and \\"$CLEAN_END_TIME\\" and $OTHERCONDITION"

2.6 数据库表数据导出到文件操作

#sql语句
export_data_sql="select concat($COLUMN) from $DBNAME.$TABLENAME"
#数据导出开始日志打印
current_time=`date "+%Y-%m-%d %T"`
echo "$current_time Start to export data [$export_data_file_name] from $DBNAME.$TABLENAME" >> $logFile
#获取数据库连接信息
initDBinfo $DBNAME
#连接数据库并执行数据导出操作
mysql -h$HOSTNAME  -P$PORT  -u$USERNAME -p$PASSWORD -Nse "$export_data_sql" --default-character-set=UTF8 > $export_data_file_path/$export_data_file_name; >> $logFile 2>&1
#数据导出结束日志打印
current_time=`date "+%Y-%m-%d %T"`
#echo "$current_time Finished export data [$export_data_file_name] from $DBNAME.$TABLENAME" >> $logFile

其中数据库表信息也可以放在配置文件中

#导出文件名 数据库表 表名 是否分库分表 时间字段 表字段(导出数据以|分隔)
A.txt test student N tim ref_id,"|",IFNULL(stu_id,""),"|",IFNULL(nam,""),"|",IFNULL(age,""),"|",IFNULL(heigth,"")

#数据库名称
DBNAME=`cat $confPath | grep $dataExportFile | awk 'print $2'`
#数据库中表的名称
TABLENAME=`cat $confPath | grep $dataExportFile | awk 'print $3'`
#表是否分库分表:Y表示分库分表;N表示未分库分表; F表示未分库分表且全量导出
ISSHARDTABLE=`cat $confPath | grep $dataExportFile | awk 'print $4'`
#时间字段
TIMECOLUMN=`cat $confPath | grep $dataExportFile | awk 'print $5'`
#要导出的字段
COLUMN=`cat $confPath | grep $dataExportFile | awk 'print $6'`

以上是关于shell脚本实现mysql数据库的增删改查操作的主要内容,如果未能解决你的问题,请参考以下文章

shell实现对mysql数据库的增删改查操作

mysql的增删改查

mysql记录的增删改查单表查询

MySQL表的增删改查(基础)

mysql 的增删改查 实现代码

Java连接MySQL数据库并实现数据库的增删改查