MySQL练习指导.docx
《MySQL练习指导.docx》由会员分享,可在线阅读,更多相关《MySQL练习指导.docx(27页珍藏版)》请在冰豆网上搜索。
MySQL练习指导
MySQL数据库上机实验
目录
1.Linux下MySQL的安装3
a.Linux下MySQL的二进制安装3
b.Linux下MySQL的源码安装5
2.Windows下MySQL的安装9
3.MySQL的命令练习10
4.MySQLCAPI的应用练习21
5.综合练习25
a.利用API编写代码,实现小组表的创建、插入和查询25
b.带图形界面的查询与显示25
c.拓展实验作业25
1.Linux下MySQL的安装
Linux下MySQL的安装:
熟悉MySQL在Linux下的二进制安装和源码安装过程。
掌握相关Linux安装命令及参数的使用。
a.Linux下MySQL的二进制安装
∙将MySQL的RPM安装包放在/root目录下
∙执行MySQL服务端的RPM安装,在终端输入:
#rpm–ivhMySQL-server-5.0.92-1.i386.rpm
∙安装成功,启动MySQL服务端
∙查看MySQL服务端端口号(为3306),在终端输入:
#netstat–nat
∙执行MySQL客户端的RPM安装,在终端输入:
#rpm–ivhMySQL-client-5.0.92-1.i386.rpm
∙进行登录,在终端输入:
#mysql
b.Linux下MySQL的源码安装
∙将源码安装文件放置于/root目录下
∙解压缩源码安装文件
∙执行配置,设置参数,在终端输入:
#cdmysql-5.0.18
#./configure--prefix=/usr/local/mysql--sysconfdir=/etc--localstatedir=/var/lib/mysql
∙配置完成
∙执行编译,在终端输入:
#make
∙编译完成
∙执行安装,在终端输入:
#makeinstall
∙安装完毕
∙初始化数据库,在终端输入:
#cd/usr/local/mysql/bin
#./mysql_install_db
∙拷贝文件/root/mysql-5.0.18/supportfiles/mysql.server文件到目录/etc/rc.d/init.d
∙将mysql_server文件更名为mysqld
∙切换目录,更改mysqld权限,在终端输入:
#cd/etc/rc.d/init.d
#chmod777mysqld
∙启动mysqld,在终端输入:
#/etc/rc.d/init.d/mysqldstart
∙最后到安装目录下运行MySQL,检查其是否能够工作:
#/usr/local/mysql/bin/mysql–uroot
∙(可选)为了快速启动和关闭MySQL服务端,可以在root下创建两个Shell文件mysqlstart.sh和mysqlstop.sh。
在终端输入:
#cd/root
#vimysqlstart.sh(同理vimysqlstop.sh)
打开vi,编辑该文件,写入/etc/rc.d/init.d/mysqldstart(stop)
生成mysqlstart.sh(mysqlstop.sh)文件。
启动MySQL只需在终端输入:
#mysqlstart.sh
2.Windows下MySQL的安装
∙Windows下熟MySQL的安装:
熟悉MySQL在Windows下的安装过程,了解MySQLGUITools的安装和使用按照书上的步骤进行操作。
3.MySQL的命令练习
∙确保连接上MySQL服务器,执行查询语句,输入:
SELECTVERSION(),CURRENT_DATE;
∙通过一个简单查询语句,将mysql用作一个简单的计算器:
SELECTSIN(PI()/4),(4+1)*5;
∙使用SHOW语句找出服务器上当前存在什么数据库:
SHOWDATABASES;
∙如果test数据库存在,尝试访问它:
USEtest
∙如果管理员在设置权限时为创建了数据库“menagerie”,则可以开始使用它。
否则,需要自己创建数据库:
CREATEDATABASEmenagerie;
∙创建数据库并不表示选定并使用它。
为了使menagerie成为当前的数据库,使用下面命令:
USEmenagerie
∙数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。
可以根据上面的例子执行一个USE语句来实现。
还可以在调用mysql时,通过命sp令行选择数据库,只需要在提供连接参数之后指定数据库名称。
例如:
mysql-uroot-pmenagerie
∙创建数据库是空的:
SHOWtables;
∙创建一个名为“pet”的表,并且它应该包含名字(name)、主人(owner)、种类(species),性别(sex)、出生(birth)和死亡日期(death)。
使用一个CREATETABLE语句指定你的数据库表的布局:
CREATETABLEpet(nameVARCHAR(20),ownerVARCHAR(20),speciesVARCHAR(20),sexCHAR
(1),birthDATE,deathDATE);
∙创建了“pet”表后,SHOWTABLES应该产生一些输出:
SHOWtables;
∙为了验证“pet”表是否按照期望的方式创建,使用一个DESCRIBE语句查看表的结构:
DESCRIBEpet;
∙创建表后,需要填入内容。
通过LOADDATA和INSERT语句可以完成该任务。
name
owner
species
sex
birth
death
Fluffy
Harold
cat
f
1993-02-04
Claws
Gwen
cat
m
1994-03-17
Buffy
Harold
dog
f
1989-05-13
Fang
Benny
dog
m
1990-08-27
Bowser
Diane
dog
m
1979-08-31
1995-07-29
Chirpy
Gwen
bird
f
1998-09-11
Whistler
Gwen
bird
1997-12-09
Slim
Benny
snake
m
1996-04-29
创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以CREATETABLE语句中列出的列次序给出。
将“pet.txt”放置在Linux目录/usr/local/mysql/bin/下,将文本文件“pet.txt”装载到pet表中,可使用命令:
注:
“pet.txt”文件已经提供,只需拷贝使用。
LOADDATAINFILE'/usr/local/mysql/bin/pet.txt'INTOTABLEpet;
∙如果想要一次增加一个新记录,可以使用INSERT语句。
最简单的形式是,提供每一列的值,其顺序与CREATETABLE语句中列的顺序相同,可以使用下面的INSERT语句添加一条新记录:
INSERTINTOpetVALUES('Puffball','Diane','hamster','f','1993-03-30',NULL);
∙SELECT最简单的形式是从一个表中检索所有记录:
SELECT*FROMpet;
∙如果发现Bowser的生日不对。
发现其正确的出生年是1989,而不是1979。
可以用一个UPDATE语句仅修正错误记录:
UPDATEpetSETbirth='1989-08-31'WHEREname='Bowser';
∙可以从表中只选择特定的行。
例如,如果要验证对Bowser的生日所做的更改,按下述方法选择Bowser的记录:
SELECT*FROMpetWHEREname='Bowser';
∙可以在任何列上指定条件。
例如查询哪个动物在1998以后出生的,测试birth列:
SELECT*FROMpetWHEREbirth>'1998-1-1';
∙可以组合条件,例如,找出雌性的狗:
SELECT*FROMpetWHEREspecies='dog'ANDsex='f';
∙也可以使用OR操作符进行组合条件查询:
SELECT*FROMpetWHEREspecies='snake'ORspecies='bird';
∙AND和OR可以混用,但AND比OR具有更高的优先级。
例如选出公猫或者母狗:
SELECT*FROMpetWHERE(species='cat'ANDsex='m')OR(species='dog'ANDsex='f');
∙选择特殊列,如果查询表中的所有行,就列出查询的列,用逗号分开。
例如,查询动物什么时候出生的,选择name和birth列:
SELECTname,birthFROMpet;
∙找出谁拥有宠物,使用这个查询:
SELECTownerFROMpet;
∙上述查询只是简单地检索每个记录的owner列,增加关键字DISTINCT检索出每个唯一的输出记录:
SELECTDISTINCTownerFROMpet;
∙可以使用一个WHERE子句结合行选择与列选择。
例如,查询狗和猫的出生日期:
SELECTname,species,birthFROMpetWHEREspecies='dog'ORspecies='cat';
4.MySQLCAPI的应用练习
∙已经安装mysql,创建一个名为“LQS”的数据库,执行:
CreateDatabaseLQS;
∙使用数据库:
USELQS
∙给LQS数据库下创建一个名为“students”的表,并添加相应的组员记录:
CREATEtablestudents(idint(3)notnullprimarykey,namechar(10)notnull,ageint(3),sexchar(3),birthdate,othervarchar(50));
Insertintostudents(id,name,age,sex,birth)values(1,'Lily',20,'F','1988-01-01'),(2,'Bob',22,'M','1986-01-03'),(3,'Anny',21,'F','1985-01-05'),(4,'Lucy',21,'F','1984-11-05'),(5,'Tom',19,'M','1989-02-25');
∙编译执行MySQL_test.c文件,使用API进行mysql语句的查询。
∙MySQL_test.c:
#include
#include
#include
staticGtkWidget*entry1;
staticGtkWidget*entry2;
voidPrintAndExit(GtkWidget*widget,GtkWidget*window){
MYSQL*mysql;
MYSQL_RES*mysql_res;
MYSQL_ROWmysql_row;
charquery[256];
introws;
intcount;
if(!
(mysql=mysql_init(NULL))){
printf("mysql_initwrong!
");
mysql_close(mysql);
exit(0);
}
if(!
mysql_real_connect(mysql,"localhost",gtk_entry_get_text(GTK_ENTRY(entry1)),gtk_entry_get_text(GTK_ENTRY(entry2)),"LQS",0,NULL,0)){
printf("connectwrong!
");
mysql_close(mysql);
exit(0);
}
strcpy(query,"select*fromstudents");
if(mysql_query(mysql,query)){
printf("mysql_querywrong!
");
mysql_close(mysql);
exit(0);
}
mysql_res=mysql_store_result(mysql);
rows=mysql_num_rows(mysql_res);
if(rows==0){
printf("returnnull");
mysql_free_result(mysql_res);
mysql_close(mysql);
exit(0);
}
for(count=0;countmysql_row=mysql_fetch_row(mysql_res);
printf("name:
%s",mysql_row[1]);
printf("age:
%s",mysql_row[2]);
printf("birth:
%s\n",mysql_row[4]);
}
mysql_free_result(mysql_res);
mysql_close(mysql);
gtk_widget_destroy(window);
gtk_main_quit();
}
voidPrintByeAndExit(GtkWidget*widget,gpointerdata){
printf("goodbyeworld!
\n");
gtk_exit(0);
}
intmain(intargc,char*argv[]){
GtkWidget*window,*label1,*label2,*vbox,*hbox1,*hbox2,*button,*separator;
gtk_set_locale();
gtk_init(&argc,&argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_policy(GTK_WINDOW(window),FALSE,FALSE,FALSE);
gtk_signal_connect(GTK_OBJECT(window),"destroy",GTK_SIGNAL_FUNC(PrintByeAndExit),NULL);
gtk_window_set_title(GTK_WINDOW(window),"Mysqltest");
gtk_container_border_width(GTK_CONTAINER(window),0);
vbox=gtk_vbox_new(FALSE,0);
gtk_container_add(GTK_CONTAINER(window),vbox);
hbox1=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox1,FALSE,FALSE,0);
label1=gtk_label_new("username:
");
gtk_box_pack_start(GTK_BOX(hbox1),label1,FALSE,FALSE,0);
entry1=gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(entry1),"");
gtk_editable_select_region(GTK_EDITABLE(entry1),0,-1);
gtk_box_pack_start(GTK_BOX(hbox1),entry1,FALSE,FALSE,0);
hbox2=gtk_hbox_new(FALSE,0);
gtk_box_pack_start(GTK_BOX(vbox),hbox2,FALSE,FALSE,0);
label2=gtk_label_new("password:
");
gtk_box_pack_start(GTK_BOX(hbox2),label2,FALSE,FALSE,0);
entry2=gtk_entry_new();
gtk_entry_set_text(GTK_ENTRY(entry2),"");
//
gtk_box_pack_start(GTK_BOX(hbox2),entry2,FALSE,FALSE,0);
separator=gtk_hseparator_new();
gtk_box_pack_start(GTK_BOX(vbox),separator,FALSE,FALSE,0);
button=gtk_button_new_with_label("Connect");
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",GTK_SIGNAL_FUNC(PrintAndExit),GTK_OBJECT(window));
gtk_box_pack_start(GTK_BOX(vbox),button,FALSE,FALSE,0);
GTK_WIDGET_SET_FLAGS(button,GTK_CAN_DEFAULT);
gtk_widget_show_all(window);
gtk_main();
return(0);
}
∙将MySQL_test.c文件放置于root目录下。
∙然后编译连接库文件头文件,生成目标文件:
#gcc-Wall-gMySQL_test.c-oMySQL_test`pkg-config--cflags--libsgtk+-2.0`-I/usr/local/mysql/include/mysql-L/usr/local/mysql/lib/mysql–lmysqlclient
∙运行程序:
#./MySQL_test
5.综合练习
a.利用API编写代码,实现小组表的创建、插入和查询
∙使用MySQLCAPI编写代码实现表创建和插入,根据自己所在小组的组员信息创建小组表“group”,字段名可以参考students表:
∙用gcc编译并运行代码
∙显示查询的结果
∙提交相关的代码和运行结果截图
b.带图形界面的查询与显示
∙结合GTK建立图形用户界面,利用MySQLCAPI进行应用开发,建立班级通信录,并能够在图形界面上进行相关主题的查询、学生的添加和删除、学生信息的浏览和相关数据统计。
∙用gcc编译并运行代码
∙在eclipse中编译、执行并调试代码
∙提交相关的代码和运行结果截图
c.拓展实验作业
(1)查阅相关资料,搭建LAMP(Linux+Apache+Mysql+PHP)平台。
(2)查阅相关资料,通过编程实现SQL注入。