1、MySQL练习指导MySQL 数据库上机实验目 录1. Linux下MySQL的安装 3a. Linux下MySQL的二进制安装 3b. Linux下MySQL的源码安装 52. Windows下MySQL的安装 93. MySQL的命令练习 104. MySQL C API的应用练习 215. 综合练习 25a. 利用API编写代码,实现小组表的创建、插入和查询 25b. 带图形界面的查询与显示 25c. 拓展实验作业 251. Linux下MySQL的安装Linux下MySQL的安装:熟悉MySQL在Linux下的二进制安装和源码安装过程。掌握相关Linux安装命令及参数的使用。a. Li
2、nux下MySQL的二进制安装 将MySQL的RPM安装包放在/root目录下 执行MySQL服务端的RPM安装,在终端输入:# rpm ivh MySQL-server-5.0.92-1.i386.rpm 安装成功,启动MySQL服务端 查看MySQL服务端端口号(为3306),在终端输入:# netstat nat 执行MySQL客户端的RPM安装,在终端输入:# rpm ivh MySQL-client-5.0.92-1.i386.rpm 进行登录,在终端输入:# mysql b. Linux下MySQL的源码安装 将源码安装文件放置于/root目录下 解压缩源码安装文件 执行配置,设置
3、参数,在终端输入:# cd mysql-5.0.18# ./configure -prefix=/usr/local/mysql -sysconfdir=/etc -localstatedir=/var/lib/mysql 配置完成 执行编译,在终端输入:# make 编译完成 执行安装,在终端输入:# make install 安装完毕 初始化数据库,在终端输入:# cd /usr/local/mysql/bin# ./mysql_install_db 拷贝文件/root/mysql-5.0.18/supportfiles/mysql.server文件到目录/etc/rc.d/init.d
4、将mysql_server文件更名为mysqld 切换目录,更改mysqld权限,在终端输入:# cd /etc/rc.d/init.d# chmod 777 mysqld 启动mysqld,在终端输入:# /etc/rc.d/init.d/mysqld start 最后到安装目录下运行MySQL,检查其是否能够工作:# /usr/local/mysql/bin/mysql uroot (可选)为了快速启动和关闭MySQL服务端,可以在root下创建两个Shell文件mysqlstart.sh和mysqlstop.sh。在终端输入:# cd /root# vi mysqlstart.sh(同理
5、vi mysqlstop.sh )打开vi,编辑该文件,写入/etc/rc.d/init.d/mysqld start(stop)生成mysqlstart.sh( mysqlstop.sh )文件。启动MySQL只需在终端输入:# mysqlstart.sh2. Windows下MySQL的安装 Windows下熟MySQL的安装:熟悉MySQL在Windows下的安装过程,了解MySQL GUI Tools的安装和使用按照书上的步骤进行操作。3. MySQL的命令练习 确保连接上MySQL服务器,执行查询语句,输入:SELECT VERSION(), CURRENT_DATE; 通过一个简单
6、查询语句,将mysql用作一个简单的计算器:SELECT SIN(PI()/4), (4+1)*5; 使用SHOW语句找出服务器上当前存在什么数据库:SHOW DATABASES; 如果test数据库存在,尝试访问它:USE test 如果管理员在设置权限时为创建了数据库“menagerie”,则可以开始使用它。否则,需要自己创建数据库:CREATE DATABASE menagerie; 创建数据库并不表示选定并使用它。为了使menagerie成为当前的数据库,使用下面命令:USE menagerie 数据库只需要创建一次,但是必须在每次启动mysql会话时在使用前先选择它。可以根据上面的例
7、子执行一个USE语句来实现。还可以在调用mysql时,通过命sp令行选择数据库,只需要在提供连接参数之后指定数据库名称。例如:mysql -uroot -p menagerie 创建数据库是空的:SHOW tables; 创建一个名为“pet”的表,并且它应该包含名字(name)、主人(owner)、种类(species),性别(sex)、出生(birth)和死亡日期(death)。使用一个CREATE TABLE语句指定你的数据库表的布局:CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), s
8、ex CHAR(1), birth DATE, death DATE); 创建了“pet”表后,SHOW TABLES应该产生一些输出:SHOW tables; 为了验证“pet”表是否按照期望的方式创建,使用一个DESCRIBE语句查看表的结构:DESCRIBE pet; 创建表后,需要填入内容。通过LOAD DATA和INSERT语句可以完成该任务。nameownerspeciessexbirthdeathFluffyHaroldcatf1993-02-04ClawsGwencatm1994-03-17BuffyHarolddogf1989-05-13FangBennydogm1990-0
9、8-27BowserDianedogm1979-08-311995-07-29ChirpyGwenbirdf1998-09-11WhistlerGwenbird1997-12-09SlimBennysnakem1996-04-29创建一个文本文件“pet.txt”,每行包含一个记录,用定位符(tab)把值分开,并且以CREATE TABLE语句中列出的列次序给出。将“pet.txt”放置在Linux目录/usr/local/mysql/bin/下,将文本文件“pet.txt”装载到pet表中,可使用命令:注:“pet.txt”文件已经提供,只需拷贝使用。LOAD DATA INFILE /us
10、r/local/mysql/bin/pet.txt INTO TABLE pet; 如果想要一次增加一个新记录,可以使用INSERT语句。最简单的形式是,提供每一列的值,其顺序与CREATE TABLE语句中列的顺序相同,可以使用下面的INSERT语句添加一条新记录:INSERT INTO pet VALUES (Puffball,Diane,hamster,f,1993-03-30,NULL); SELECT最简单的形式是从一个表中检索所有记录:SELECT * FROM pet; 如果发现Bowser的生日不对。发现其正确的出生年是1989,而不是1979。可以用一个UPDATE语句仅修正
11、错误记录:UPDATE pet SET birth = 1989-08-31 WHERE name = Bowser; 可以从表中只选择特定的行。例如,如果要验证对Bowser的生日所做的更改,按下述方法选择Bowser的记录:SELECT * FROM pet WHERE name = Bowser; 可以在任何列上指定条件。例如查询哪个动物在1998以后出生的,测试birth列:SELECT * FROM pet WHERE birth 1998-1-1; 可以组合条件,例如,找出雌性的狗:SELECT * FROM pet WHERE species = dog AND sex = f;
12、 也可以使用OR操作符进行组合条件查询:SELECT * FROM pet WHERE species = snake OR species = bird; AND和OR可以混用,但AND比OR具有更高的优先级。例如选出公猫或者母狗:SELECT * FROM pet WHERE (species = cat AND sex = m) OR (species = dog AND sex = f); 选择特殊列,如果查询表中的所有行,就列出查询的列,用逗号分开。例如,查询动物什么时候出生的,选择name和birth列:SELECT name, birth FROM pet; 找出谁拥有宠物,使用
13、这个查询:SELECT owner FROM pet; 上述查询只是简单地检索每个记录的owner列,增加关键字DISTINCT检索出每个唯一的输出记录:SELECT DISTINCT owner FROM pet; 可以使用一个WHERE子句结合行选择与列选择。例如,查询狗和猫的出生日期:SELECT name, species, birth FROM pet WHERE species = dog OR species = cat;4. MySQL C API的应用练习 已经安装mysql,创建一个名为“LQS”的数据库,执行:Create Database LQS; 使用数据库:USE
14、LQS 给LQS数据库下创建一个名为“students”的表,并添加相应的组员记录:CREATE table students(id int(3) not null primary key,name char(10) not null,age int(3),sex char(3),birth date,other varchar(50);Insert into students(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,Luc
15、y,21,F,1984-11-05),(5,Tom,19,M,1989-02-25); 编译执行MySQL_test.c文件,使用API进行mysql语句的查询。 MySQL_test.c: #include #include #include static GtkWidget* entry1;static GtkWidget* entry2;void PrintAndExit(GtkWidget* widget,GtkWidget* window)MYSQL *mysql;MYSQL_RES *mysql_res;MYSQL_ROW mysql_row;char query256;int r
16、ows;int count;if(!(mysql=mysql_init(NULL)printf(mysql_init wrong!);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(connect wrong!);mysql_close(mysql);exit(0);strcpy(query,select * from stu
17、dents);if(mysql_query(mysql,query)printf(mysql_query wrong!);mysql_close(mysql);exit(0);mysql_res=mysql_store_result(mysql);rows=mysql_num_rows(mysql_res);if(rows=0)printf(return null);mysql_free_result(mysql_res);mysql_close(mysql);exit(0);for(count=0;countrows;count+)mysql_row=mysql_fetch_row(mysq
18、l_res);printf(name:%s,mysql_row1);printf(age:%s,mysql_row2);printf(birth:%sn,mysql_row4);mysql_free_result(mysql_res);mysql_close(mysql);gtk_widget_destroy(window);gtk_main_quit();void PrintByeAndExit(GtkWidget* widget,gpointer data)printf(goodbye world!n);gtk_exit(0);int main(int argc,char* argv)Gt
19、kWidget *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);gt
20、k_window_set_title(GTK_WINDOW(window),Mysql test);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(user name:);gtk_box_pa
21、ck_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);
22、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);butt
23、on=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_tes
24、t.c文件放置于root目录下。 然后编译连接库文件头文件,生成目标文件:# gcc -Wall -g MySQL_test.c -o MySQL_test pkg-config -cflags -libs gtk+-2.0 -I/usr/local/mysql/include/mysql -L/usr/local/mysql/lib/mysql lmysqlclient 运行程序:# ./MySQL_test5. 综合练习a. 利用API编写代码,实现小组表的创建、插入和查询 使用MySQL C API编写代码实现表创建和插入,根据自己所在小组的组员信息创建小组表“group”,字段名可以参考students表: 用gcc编译并运行代码 显示查询的结果 提交相关的代码和运行结果截图b. 带图形界面的查询与显示 结合GTK建立图形用户界面,利用MySQL C API进行应用开发,建立班级通信录,并能够在图形界面上进行相关主题的查询、学生的添加和删除、学生信息的浏览和相关数据统计。 用gcc编译并运行代码 在eclipse中编译、执行并调试代码 提交相关的代码和运行结果截图c. 拓展实验作业(1) 查阅相关资料,搭建LAMP(Linux+Apache+Mysql + PHP)平台。(2) 查阅相关资料,通过编程实现SQL注入。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1