美文网首页
Shell操作MySql数据库

Shell操作MySql数据库

作者: HR1006 | 来源:发表于2019-04-27 00:41 被阅读0次

  近期工作中有需求需要根据MySql查询返回结果循环发起Spark任务,为方便以后遇到同类需求能快速实现,所以抽空写了个公共脚本,简单实现在Shell中执行MySql查询及获取查询返回值,其他数据库的查询原理类似,如有需要根据下面代码简单修改即可。

  • 执行insert、update、delete的方法

    # 执行sql 无需获取返回值,sql执行失败则脚本异常结束
    # 参数1 完整的sql语句
    function mysqlExecute {
      mysql -u"${HOST}" -P"${PORT}" -u"${USER}" -p"${PASSWD}" -D"${DATABASE}" -e "$1"
      if [[ $? -eq 0 ]]
      then
          echo "exec sql succeed: "
          echo "$1"
      else
          echo "exec sql failed: "
          echo "$1"
          exit -1
      fi
    }
    
  • 执行select的方法

    # 执行sql 需获取返回值,sql执行失败则脚本异常结束
    # 参数1 完整的select语句
    function mysqlExecuteQuery {
      # 返回结果:-e带表头 -Ne不带表头
      rs=(`mysql -u"${HOST}" -P"${PORT}" -u"${USER}" -p"${PASSWD}" -D"${DATABASE}" -Ne "$1"`)
      if [[ $? -eq 0 ]]
      then
          # 打印查询结果中的每一个元素
          echo ${rs[*]}
      else
          echo "exec sql failed: "
          echo "$1"
          exit -1
      fi
    }
    
  • 获取数据行数的方法

    # 计算查询返回结果数据行数
    # 参数1 select总列数
    # 参数2 查询结果数组
    function getRowNumFromResult {
        local rs
        rs=(`echo "$@"`)
        echo $[(${#rs[@]}-1)/$1]
    }
    
  • 获取指定行指定列值的方法

    # 获取指定行指定列的值
    # 参数1 字段所在行数
    # 参数2 字段所在列数
    # 参数3 select总列数
    # 参数4+ 查询结果数组
    function getValueFromResult {
      local rowIndex
      local colIndex
      local column_num
      local rs
      rowIndex=$1
      colIndex=$2
      column_num=$3
      rs=(`echo "$@"`)
      # 下标=总列数*(第几行-1)+第几列-1+非查询结果的其他参数个数
      idx=$[$column_num*($rowIndex-1)+$colIndex-1+3]
      if [[ $[idx] -le ${#rs[@]} ]]
      then
          # 根据下标获取目标结果
          echo ${rs[$idx]}
      fi
    }
    
  • 包含上述公共方法的完整脚本

    #!/usr/bin/env bash
    HOST="localhost"
    PORT="3306"
    USER="xiaohai"
    PASSWD="xiaohai"
    DATABASE="testdb"
    
    # 执行sql 无需获取返回值,sql执行失败则脚本异常结束
    # 参数1 完整的sql语句
    function mysqlExecute {
      mysql -u"${HOST}" -P"${PORT}" -u"${USER}" -p"${PASSWD}" -D"${DATABASE}" -e "$1"
      if [[ $? -eq 0 ]]
      then
          echo "exec sql succeed: "
          echo "$1"
      else
          echo "exec sql failed: "
          echo "$1"
          exit -1
      fi
    }
    
    # 执行sql 需获取返回值,sql执行失败则脚本异常结束
    # 参数1 完整的select语句
    function mysqlExecuteQuery {
      # 返回结果:-e带表头 -Ne不带表头
      rs=(`mysql -u"${HOST}" -P"${PORT}" -u"${USER}" -p"${PASSWD}" -D"${DATABASE}" -Ne "$1"`)
      if [[ $? -eq 0 ]]
      then
          # 打印查询结果中的每一个元素
          echo ${rs[*]}
      else
          echo "exec sql failed: "
          echo "$1"
          exit -1
      fi
    }
    
    # 获取指定行指定列的值
    # 参数1 字段所在行数
    # 参数2 字段所在列数
    # 参数3 select总列数
    # 参数4+ 查询结果数组
    function getValueFromResult {
      local rowIndex
      local colIndex
      local column_num
      local rs
      rowIndex=$1
      colIndex=$2
      column_num=$3
      rs=(`echo "$@"`)
      # 下标=总列数*(第几行-1)+第几列-1+非查询结果的其他参数个数
      idx=$[$column_num*($rowIndex-1)+$colIndex-1+3]
      if [[ $[idx] -le ${#rs[@]} ]]
      then
          # 根据下标获取目标结果
          echo ${rs[$idx]}
      fi
    }
    
    # 计算查询返回结果数据行数
    # 参数1 select总列数
    # 参数2 查询结果数组
    function getRowNumFromResult {
        local rs
        rs=(`echo "$@"`)
        echo $[(${#rs[@]}-1)/$1]
    }
    
  • 示例脚本:

    #!/usr/bin/env bash
    . ./mysqlConn.sh
    
    # select列数
    column_num=2
    
    selectSql="select id, name from test;"
    
    # 调用方法执行sql,打印出sql执行结果但不获取返回值
    mysqlExecute "$selectSql"
    # 用数组接收查询返回值
    result=(`mysqlExecuteQuery "$selectSql"`)
    
    # 计算查询返回结果数据行数
    row_num=`getRowNumFromResult ${column_num} ${result[*]}`
    
    for (( i=1; i<=$row_num; i=i+1))
    do
        # 获取第一列的值
        id=`getValueFromResult $[i] 1 $column_num ${result[*]}`
        # 获取第二列的值
        name=`getValueFromResult $[i] 2 $column_num ${result[*]}`
        echo "id: $id, name: $name"
    done
    

      注意:Shell中单个数组元素中间包含空格的话在处理时会被认为是多个元素,用下标取值时会出现数据错位,因此在使用Shell查询MySql前需先确认查询结果字段值中间不包含空格。另外,在Shell中处理sql查询结果效率较低,如返回结果集较大,不建议使用脚本处理。

相关文章

  • Shell脚本操作-6

    Shell操作数据库MySQL SQL基本操作 安装MySql数据库 连接数据库 mysql -u root -p...

  • shell中的sql操作

    在编写shell脚本的时候,可能会遇到操作mysql数据库的情况。下面介绍如何在shell脚本中操作mysql数据...

  • mysql -e参数使用详解

    可以用shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查...

  • MySQL 语法学习

    原文地址 shell 连接 Mysql 的几种方式 数据库操作 显示数据库 使用某个数据库 创建一个数据库 删除一...

  • 3 MySQL数据库操作

    2 MySQL数据库操作 3.1 MySQL操作数据库 3.2 MySQL操作数据表 3.2.1 MySQL创建数...

  • Shell操作MySql数据库

      近期工作中有需求需要根据MySql查询返回结果循环发起Spark任务,为方便以后遇到同类需求能快速实现,所以抽...

  • 使用MySQL命令行导入MySQL数据库

    1、打开MySQL的shell命名窗口 2、输入数据库密码进入shell 3、创建数据库 4、导入数据库 5、验证...

  • python对mysql的操作

    python对mysql的操作 Mysql 常见操作 数据库操作 PS:用户权限相关数据保存在mysql数据库的u...

  • 利用shell脚本实现对mysql数据库的备份

    利用shell脚本实现对mysql数据库的备份

  • Go操作MySQL

    Go语言操作MySQL MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库。 Go操作...

网友评论

      本文标题:Shell操作MySql数据库

      本文链接:https://www.haomeiwen.com/subject/imzcnqtx.html