有一份包含学生详细信息的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中检查也是如此: