Bash中读写MySQL数据库

有一份包含学生详细信息的CSV文件,需要将文件的内容插入到一个数据表中。保证为每一个系生成一个单独的排名列表。
编写三个脚本,分别用于创建数据库及数据表、向数据表中插入学生数据、从数据表中读取并显示处理过的数据。

创建数据库及数据表:

#!/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中检查也是如此:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值