Bash中读写MySQL数据库

来源:互联网 发布:功能薄膜材料知乎 编辑:程序博客网 时间:2024/06/13 21:50
有一份包含学生详细信息的CSV文件,需要将文件的内容插入到一个数据表中。保证为每一个系生成一个单独的排名列表。
编写三个脚本,分别用于创建数据库及数据表、向数据表中插入学生数据、从数据表中读取并显示处理过的数据。

创建数据库及数据表:

#!/bin/bashUSER="root"PASS="900212"mysql -u $USER -p$PASS <<EOF 2> /dev/nullCREATE DATABASE students;EOF[ $? -eq 0 ] $$ echo Create DB || echo DB already existmysql -u $USER -p$PASS students <<EOF 2> /dev/nullCREATE TABLE students(id int,name varchar(100),mark int,dept varchar(4));EOF[ $? -eq 0 ] && echo Created table students || echo Table students already existmysql -u $USER -p$PASS students <<EOFDELETE FROM students;EOF

<<EOF EOF之间的文本被作为mysql的标准输入,$?检查mysql命令的退出状态。

将数据插入数据表的脚本:

#!/bin/bashUSER="root"PASS="900212"if [ $# -ne 1 ];then   echo $0 DATAFILE   echo   exit 2fidata=$1while 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 <<EOFINSERT INTO students VALUES($query);EOFdone< $dataecho Wrote data into DB

为了引用字符串,数组中的值要加上\"作为前缀和后缀。

查询数据库的脚本:

#!/bin/bashUSER="root"PASS="900212"if [ $# -ne 1 ];then   echo $0 DATAFILE   echo   exit 2fidata=$1while 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 <<EOFINSERT INTO students VALUES($query);EOFdone< $dataecho Wrote data into DBroot@ubuntu:/home/qixuan/qixuan02/shell# cat read_db.sh #!/bin/bashUSER="root"PASS="900212"depts=`mysql -u $USER -p$PASS students <<EOF | tail -n +2SELECT DISTINCT dept FROM students;EOF`for d in $depts;doecho Department : $dresult="`mysql -u $USER -p$PASS students <<EOFSET @i:=0;SELECT @i:=@i+1 as rank,name,mark FROM students WHERE dept="$d" ORDER BY mark DESC;EOF`"echo "$result"echodone

SET @i:=0是一个SQL构件,用来设置变量i=0。在每行中,变量i都会增加并作为学生排名来显示。

作为输入的CSV文件(studentdata.csv):

1,Navin M,98,CS2,Kavya N,70,CS3,Nawaz O,80,CS4,Hari S,80,EC5,Alex M,50,EC6,Neenu J,70,EC7,Bob A,30,EC8,Anu M,90,AE9,Sruthi,89,AE10,Andrew,89,AE
接下来进行实验操作:


登录到mysql中检查也是如此:


0 0
原创粉丝点击