1燕山大学Linux三级项目报告项目名称Shell脚本对MySQL的多表操作学生姓名黄若然曾宪娇段彬彬董博指导教师冯建周李可李季辉马勤勇提交日期2015年6月2摘要本报告主要记录了在LinuxUbuntu操作系统的环境下安装MySQL数据后,用Shell脚本对该数据库进行的一系列的操作。包括了用shell脚本对MySQL的用户权限设置,用户组的更改设置。使用了专门的脚本对MySQL的启动、关闭和重启进行操作,在数据库中建立了名为str的采用utf-8编码的数据库,支持中文语言。建立了student,stuscore,teacher,course4个基本表进行相应的增删改查操作。在此基础上还额外附加了多表联合查询,表内信息排序,统计给定条件的学生总分和平均分(按增序和降序排列输出),添加相应的字段,数据库内容的导出等。关键词:Shell脚本,多表联合,字段增加,统计排序,数据库导出前言本报告主要在于研究利用Linux下的Shell脚本操作MySQL数据库,不仅能够通过Shell脚本进入到数据库中,还能对其进行相关操作,如数据库的建立、编码的更改(支持中文)、相应表的增删改查等简单操作操作。此外,在原有的基础上,还扩大了相关操作范围,增加了一些复杂的操作,如1、字段的添加2、多条件的多表联合查询3、对学生人数和分数的统计排序4、数据库内容的导出此报告主要涉及20个脚本文件:依次为add_field,all_operation,create_alltable,create_database,create_table_course,create_table_student,create_table_studentscore,create_table_teacher,delete.sh,drop_alltable,exportdata,insert.sh,mysql_in,mysql_restart,mysql_start,mysql_stop,operation,select.sh,select_condition1,update.sh。通过主Shell脚本进行选择判断后再调用其它Shell脚本进行操作。本报告主要致力于研究如何灵活使用Shell脚本,以及怎样通过Shell脚本调用相关的SQL命令进行操作。达到的预期结果是通过调用create_table创建一个能够支持中文的数据,创建4个有关联的表(学生表,成绩表,教师表和学科表)并通过先关的ID联系起来,并且在创建表的同时插入一批具有相互关联的信息。在基本的增删改查方面,提供可供输入的选项,即修改删除的内容并不是Shell脚本中固定的,而是可以通过前台输入动态更变数据库。再在此接触上进行前面提到的相关复杂操作。3项目分工:黄若然(组长):Sell脚本的编写和其余复杂操作的实现,多表设计。曾宪娇:基本的增删改查实现和简单的Shell脚本编写,多表设计。段彬彬:MySQL数据库的搭建和表的建立,多表设计。董博:MySQL数据库的搭建正文1)项目应用背景;随着Linux操作系统完善和普及,如何更好的运用Linux的相关知识特别是Linux在数据库运用方面的知识已经成为一个大学生特别是计算机专业学生必备的知识技能。未来要更多的运用数据库的相关操作,而这些操作无一离不开Linux环境的支持。所以怎么样在Linux环境下更好更灵活的操作数据库已经成为当代计算机和软件相关知识人员的一项必备的技能。而在lInux环境下,Shell脚本无疑是对其灵活运用的一个典范,因此,研究Linux环境下通过Shell脚本操作MySQL数据库已经是提升相关专业学生的必不可少的环节。2)算法设计;共计4张表:分别是学生表(student),教师表(teacher),成绩表(stuscrore),课程表(course)通过此4表可以任意查询具有每一条件的相关信息。相连条件为:学生表中的st_id,成绩表中的st_id,成绩表中的sc_id,课程表中的sc_id,课程表中的tea_id。如需要查找的条件设计到教师,成绩,和学生信息,则可以通过补充上相应的条件关联,如查找冯老师所教小明的Linux学科的分数,则应把student.st_id=stuscore.st_idandstuscore.sc_id=course.sc_idandcourse.tea_id=teacher.tea_id这些条件联合起来,即可锁定需要查询的信息。4算法设计原因:之所以这样设计是为了减少信息冗余量,根据数据库的第三范式相关可知当数据量大时,为了加快查询时间,减少信息的冗余量,需要把独立的各个个体抽象出来,提出只与其相关的属性信息,并通过外在条件相连,如果把学生信息和所学的课程放在同一张表中,当多个学生同时学习一门科目时就会在学科字段上出现大量相同的科目信息,而这些科目信息其实是可以放在一张表通过相应的id相连的。3)数据结构设计;以下是4个基本表的设计截图(为了方便展示,现在Navicat可视化界面中展示):学生表(student),主键为id,且为自动递增图1.1学生表结构设计学生成绩表(stuscore),主键为st_id图1.2学生成绩表结构设计课程表结构设计(course)5图1.3课程表结构设计教师表结构设计(teacher)图1.3教师表结构设计4)软件结构设计;总脚本all_oeration调用其它基本脚本,通过ifelseiffi选择结构选择相应的脚本进行执行,整体放在一个大的for循环中。如for((循环条件))doIf(选择条件)执行语句fidonemysql_start为MySQL启动,mysql_restart为MySQL重启,mysql_stop为MySQL关闭insert.sh,delete.sh,update.sh,select.sh依次为增删改查操作(键入值)select_condition1为条件查询create_table_course,create_table_student,create_table_studentscore,create_table_teacher为4张表的创建操作,由create_alltable脚本调用依次创建。drop_alltable为所有表的删除。all_operation中包含了多表联合,统计排序操作。共有4次操作add_field为字段添加,添加的表名和字段名及长度都可通过键盘输入exportdata为数据导出功能65)计算机系统搭建;安装ubuntu1.制定安装系统的分区计划。2.配置光驱引导镜像文件iso,启动系统,开始安装过程。3.根据安装计划,对磁盘空间进行分区设置。4.根据系统安装指导,完成Linux系统的安装过程。5.安装成功后,退出系统,重新启动虚拟机,登陆Linux操作系统。进入开机页面7进入用户账户6.对Linux系统进行配置,如网络设备等。安装MySQL1、首先到mysql的下载中心上下载最新的tar.gz包,网站:8、下载后得到文件mysql-5.0.45-linux-i686-icc-glibc23.tar.gz,然后将其解压,并重命名为mysql,使用mv命令将其移到/usr/local目录下提示:其中文本文件INSTALL-BINARY详细的记录了mysql在Linux下的安装方法,英文好的同鞋可以直接的查看3、mysql默认的安装目录就是在/usr/local/mysql,这就是上面为什么我们要将其移动在/uer/local下的原因;如果在你的机器上以前安装有老板本的mysql,需要先将它的文件删除,同时注意删除老版本的etc/my.cnf文件和/etc/mysql目录,这两个文件控制的是mysql的一些配置属性。4、先要创建的一个名为mysql的用户组和用户,来承载mysql数据库的运行,使用如下命令:创建用户组:在创建的用户组中创建一个用户:sudouseradd–gmysqlmysql这里使用sudo命令是确保以root权限执行此命令,如果你登入本机的用户是root用户,则直接的使用groupadd和useradd命令题外话:对应删除用户组及用户的命令是groupdel和userdel。5、接着进入mysql目录,修改mysql目录的拥有者,为mysql用户:这里的点“.”代表的就是当前目录,选项-R表示递归当前目录及其子目录6、安装mysql,执行命令:9有以上输出即为正确安装编码;主文件:all_operation#!/bin/bashfor((i=1;i100;i++))doecho'0、退出'echo'1、开启Mysql'echo'2、关闭Mysql'echo'3、重启Mysql'echo'4、创建数据库'echo'5、创建所有表'echo'6、删除所有表'echo'7、查找数据'echo'8、更新数据'echo'9、删除数据'echo'10、添加字段'echo'11、复杂查询操作'10echo'12、数据导出'echo'请选择所需要执行的操作'readopeartion1if[${opeartion1}=0];thenbreakelif[${opeartion1}=1];thensourcemysql_startelif[${opeartion1}=2];thensourcemysql_stopelif[${opeartion1}=3];thensourcemysql_restartelif[${opeartion1}=4];thensourcecreate_databaseelif[${opeartion1}=5];thensourcecreate_alltableelif[${opeartion1}=6];thensourcedrop_alltableelif[${opeartion1}=7];thensourceselect.shelif[${opeartion1}=8];thensourceupdate.shelif[${opeartion1}=9];thensourcedelete.shelif[${opeartion1}=10];thensourceadd_fieldelif[${opeartion1}=11];thensourceoperationelif[${opeartion1}=12];thensourceexportdataelseecho'请输入正确的指令'continuefidone主文件:insert.sh,delete.sh,update.sh,select.sh依次为增删改查操作(键入值)11echo查询结果为:/usr/local/mysql/bin/mysql-uroot-pEOFusestr;select*fromstudent;#查询全部记录exitEOFecho请输入需要查询的学生名:readname1/usr/local/mysql/bin/mysql-uroot-pEOFusestr;select*fromstudentwherename='$name1';#查询姓名是黄若然的记录EOF#!/bin/bashecho输入需要删除的表名:readtable1echo输入需要删除的条件的字段名和值:readcondition1value1/usr/local/mysql/bin/mysql-uroot-pEOFusestr;deletefrom$table1where$condition1=$value1;select*from$table1;EOF#!/bin/bashecho输入需要更新的表名:readtable1echo输入需要更新的条件的字段名和值:readcondition1value1echo输入需要更改的条件名和值:readcondition2value2#echo$table1,$ID1,$condition1,$value1/usr/local/mysql/bin/my