Bash中读写MySQL数据库
2016-03-30 21:58
531 查看
有一份包含学生详细信息的CSV文件,需要将文件的内容插入到一个数据表中。保证为每一个系生成一个单独的排名列表。
编写三个脚本,分别用于创建数据库及数据表、向数据表中插入学生数据、从数据表中读取并显示处理过的数据。
创建数据库及数据表:
<<EOF EOF之间的文本被作为mysql的标准输入,$?检查mysql命令的退出状态。
将数据插入数据表的脚本:
为了引用字符串,数组中的值要加上\"作为前缀和后缀。
查询数据库的脚本:
SET @i:=0是一个SQL构件,用来设置变量i=0。在每行中,变量i都会增加并作为学生排名来显示。
作为输入的CSV文件(studentdata.csv):
登录到mysql中检查也是如此:
编写三个脚本,分别用于创建数据库及数据表、向数据表中插入学生数据、从数据表中读取并显示处理过的数据。
创建数据库及数据表:
#!/bin/bash USER="root" PASS="900212" mysql -u $USER -p$PASS <<EOF 2> /dev/null CREATE DATABASE students; EOF [ $? -eq 0 ] $$ echo Create DB || echo DB already exist mysql -u $USER -p$PASS students <<EOF 2> /dev/null CREATE TABLE students( id int, name varchar(100), mark int, dept varchar(4) ); EOF [ $? -eq 0 ] && echo Created table students || echo Table students already exist mysql -u $USER -p$PASS students <<EOF DELETE FROM students; EOF
<<EOF EOF之间的文本被作为mysql的标准输入,$?检查mysql命令的退出状态。
将数据插入数据表的脚本:
#!/bin/bash USER="root" PASS="900212" if [ $# -ne 1 ]; then echo $0 DATAFILE echo exit 2 fi data=$1 while read line; do oldIFS=$IFS IFS=, values=($line) values[1]="\"`echo ${values[1]} | tr ' ' '#'`\"" values[3]="\"`echo ${values[3]}`\"" query=`echo ${values[@]} | tr ' #' ', ' ` IFS=$oldIFS mysql -u $USER -p$PASS students <<EOF INSERT INTO students VALUES($query); EOF done< $data echo Wrote data into DB
为了引用字符串,数组中的值要加上\"作为前缀和后缀。
查询数据库的脚本:
#!/bin/bash USER="root" PASS="900212" if [ $# -ne 1 ]; then echo $0 DATAFILE echo exit 2 fi data=$1 while read line; do oldIFS=$IFS IFS=, values=($line) values[1]="\"`echo ${values[1]} | tr ' ' '#'`\"" values[3]="\"`echo ${values[3]}`\"" query=`echo ${values[@]} | tr ' #' ', ' ` IFS=$oldIFS mysql -u $USER -p$PASS students <<EOF INSERT INTO students VALUES($query); EOF done< $data echo Wrote data into DB
root@ubuntu:/home/qixuan/qixuan02/shell# cat read_db.sh
#!/bin/bash
USER="root"
PASS="900212"
depts=`mysql -u $USER -p$PASS students <<EOF | tail -n +2
SELECT DISTINCT dept FROM students;
EOF`
for d in $depts;
do
echo Department : $d
result="`mysql -u $USER -p$PASS students <<EOF
SET @i:=0;
SELECT @i:=@i+1 as rank,name,mark FROM students WHERE dept="$d" ORDER BY mark DESC;
EOF`"
echo "$result"
echo
done
SET @i:=0是一个SQL构件,用来设置变量i=0。在每行中,变量i都会增加并作为学生排名来显示。
作为输入的CSV文件(studentdata.csv):
1,Navin M,98,CS 2,Kavya N,70,CS 3,Nawaz O,80,CS 4,Hari S,80,EC 5,Alex M,50,EC 6,Neenu J,70,EC 7,Bob A,30,EC 8,Anu M,90,AE 9,Sruthi,89,AE 10,Andrew,89,AE接下来进行实验操作:
登录到mysql中检查也是如此:
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复