Mysql培训经典教程思考题参考答案.docx

上传人:b****6 文档编号:6229752 上传时间:2023-01-04 格式:DOCX 页数:12 大小:20.11KB
下载 相关 举报
Mysql培训经典教程思考题参考答案.docx_第1页
第1页 / 共12页
Mysql培训经典教程思考题参考答案.docx_第2页
第2页 / 共12页
Mysql培训经典教程思考题参考答案.docx_第3页
第3页 / 共12页
Mysql培训经典教程思考题参考答案.docx_第4页
第4页 / 共12页
Mysql培训经典教程思考题参考答案.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Mysql培训经典教程思考题参考答案.docx

《Mysql培训经典教程思考题参考答案.docx》由会员分享,可在线阅读,更多相关《Mysql培训经典教程思考题参考答案.docx(12页珍藏版)》请在冰豆网上搜索。

Mysql培训经典教程思考题参考答案.docx

Mysql培训经典教程思考题参考答案

思考题参考答案

第二章

2、在Win32平台上运行分发包中的setup.exe程序,安装MySQL系统后,就自动初始化授权表。

对于Unix平台,运行脚本mysql_install_db,之前应该首先切换到启动mysqld的用户,例如mysql:

#sumysql

$mysql_install_db

安装授权表之后修改root用户的密码,由于初始化后存在两个从localhost和任意主机连接的root用户,所以推荐使用下面的办法:

$mysql-urootmysql(由于现在不存在密码,因此不比提供-p选项)

mysql>UPDATEuserSETpassword=password(“mypass”)WHEREUser=root;

3、使用如下命令更改密码:

shell>mysqladmin-uroot-ppassword‘newpass’

EnterPassword:

*******

出现EnterPassword的提示后输入原来的密码oldpass即可。

读者可以尝试其它所有本章介绍的方法。

4、首先以root用户的身份连接到服务器:

shell>mysql-uroot-p

Enterpassword:

*******

出现Enterpassword提后输入root用户的密码,然后即进入mysql客户机的交互模式,可以看到下面的提示:

WelcometotheMySQLmonitor.Commandsendwith;or\g.

YourMySQLconnectionidis4toserverversion:

3.23.25-beta-log

Type'help;'or'\h'forhelp.Type'\c'toclearthebuffer

mysql>

然后发布查询,直接键入题目中的语句:

mysql>SELECTUser,HostFROMmysql.user;

应该有类似于下面的结果:

+-------+-----------+

|User|Host|

+-------+-----------+

|root|%|

|admin|localhost|

|root|localhost|

+-------+-----------+

5、在全局选项文件(Unix上位于/etc/f,Windows上位于c:

\f)中加入下面的几行:

[mysql]

user=root

password

然后在运行mysql客户程序,就不必提供参数:

shell>mysql

EnterPassword:

********

你可以查看当前的连接,以确定是否是如此:

mysql>SHOWPROCESSLIST;

+----+------+-----------+------+---------+------+-------+------------------+

|Id|User|Host|db|Command|Time|State|Info|

+----+------+-----------+------+---------+------+-------+------------------+

|4|root|localhost|NULL|Query|0|NULL|SHOWPROCESSLIST|

+----+------+-----------+------+---------+------+-------+------------------+

第三章

2、连接服务器的命令为:

shell>mysql-h-uroot-ptest

EnterPassword:

******

如果使用选项文件,将下面几行加入全局选项文件中:

[mysql]

host=

user=root

password

然后可以直接运行mysql,不比提供连接参数:

shell>mysql

EnterPassword:

*******

3、创建表的语句为:

CREATETABLEpet

nameCHAR(30),

ownerCHAR(30),

speciesCHAR(10),

sexENUM(“M”,”F”)NOTNULL,

birthDATE,

deathDATE

4、如下录入文件pet.txt,段与段用制表符分隔

FluffyHaroldcatF1993-02-04\N

ClawsGwencatM1994-03-17\N

BuffyHarolddogF1989-05-13\N

ChirpyGwenbirdF1998-09-11\N

FangBennydogM1990-08-27\N

BowserDianedogM1990-08-311995-07-29

WhistlerGwenbird\N1997-12-09\N

SlimBennysnakeM1996-04-29\N

PuffballDianehamsterF1999-03-30\N

然后连接服务器,发布查询:

mysql>LOADDATAINFILE“pet.txt”INTOTABLEpet;

由于缺省时,LOADDATA语句以特殊字符’\n’作为记录的结束,这和Unix系统的文本编辑器以’\n’为换行符是一致的,但是在Windows系统中,换行符是’\r\n’,因此,如果是在Windows系统编辑的文件,那么上面的语句不能成功的录入数据,要做如下的修改:

mysql>LOADDATAINFILE“pet.txt”INTOTABLEpet

->LINESTERMINATEDBY‘\r\n’;

如果使用mysqlimport程序,相应的命令行为:

shell>mysqlimporttest‘pet.tt’

或者使用:

shell>mysqlimporttest‘pet.tt’--lines-terminated-by=’\r\n’

第四章

1、创建表:

mysql>CREATETABLEex4

->(

->dataFLOAT,

->birthDATETIME

->);

录入数据:

mysql>INSERTex4VALUES(RAND(),NOW());

多录入几个数据,现有的数据为:

mysql>select*fromex4;

+----------+---------------------+

|data|birth|

+----------+---------------------+

|0.830329|2001-01-0121:

21:

10|

|0.531143|2001-01-0121:

21:

12|

|0.164729|2001-01-0121:

21:

13|

|0.230213|2001-01-0121:

21:

14|

+----------+---------------------+

data列的平均值:

mysql>SELECTAVG(data)ASaverageFROMex4;

+------------------+

|average|

+------------------+

|0.43910377845168|

+------------------+

data列的总和:

mysql>SELECTSUM(data)AS"sumofdata"FROMex4;

+-----------------+

|sumofdata|

+-----------------+

|1.7564151138067|

+-----------------+

mysql>SELECTMAX(data)AS"maxofdata",MIN(data)AS"minofdata"

->FROMex4;

+------------------+------------------+

|maxofdata|minofdata|

+------------------+------------------+

|0.83032947778702|0.16472874581814|

+------------------+------------------+

data列降序排列:

mysql>SELECT*FROMex4ORDERBYdataDESC;

+----------+---------------------+

|data|birth|

+----------+---------------------+

|0.830329|2001-02-1821:

21:

10|

|0.531143|2001-02-1821:

21:

12|

|0.230213|2001-02-1821:

21:

14|

|0.164729|2001-02-1821:

21:

13|

+----------+---------------------+

2、使用标准SQL模式匹配:

mysql>select*fromex4wherebirthlike"2001-01-01%";

+----------+---------------------+

|data|birth|

+----------+---------------------+

|0.830329|2001-01-0121:

21:

10|

|0.531143|2001-01-0121:

21:

12|

|0.164729|2001-01-0121:

21:

13|

|0.230213|2001-01-0121:

21:

14|

+----------+---------------------+

使用扩张正则表达式模式匹配:

mysql>select*fromex4wherebirthREGEXP"^2001-01-01";

+----------+---------------------+

|data|birth|

+----------+---------------------+

|0.830329|2001-01-0121:

21:

10|

|0.531143|2001-01-0121:

21:

12|

|0.164729|2001-01-0121:

21:

13|

|0.230213|2001-01-0121:

21:

14|

+----------+---------------------+

3、为student表创建索引:

mysql>ALTERTABLEstudent

->ADDPRIMARYKEY(id),

->ADDINDEXmark(english,chinese,history);

这样查看创建的索引:

mysql>SHOWINDEXFROMstudent;

+---------+------------+----------+--------------+-------------+---

|Table|Non_unique|Key_name|Seq_in_index|Column_name|...

+---------+------------+----------+--------------+-------------+---

|student|0|PRIMARY|1|id|...

|student|1|mark|1|english|...

|student|1|mark|2|chinese|...

|student|1|mark|3|history|...

+---------+------------+----------+--------------+-------------+---

为pet表创建索引,这次使用另一种方法:

mysql>CREATEINDEXnameONpet(name(10),owner(10));

查看创建的索引的情况:

mysql>SHOWINDEXFROMpet;

+-------+------------+----------+--------------+-------------+-

|Table|Non_unique|Key_name|Seq_in_index|Column_name|...

+-------+------------+----------+--------------+-------------+-

|pet|1|name|1|name|...

|pet|1|name|2|owner|...

+-------+------------+----------+--------------+-------------+-

4、删除pet表的索引:

mysql>DROPINDEXnameONpet;

或者可以:

mysql>ALTERTABLEpetDROPINDEXname;

然后再用SHOW语句产看可知

mysql>showindexfrompet;

Emptyset(0.01sec)

第五章

1、shell>mysqldump--all-database--opt>data.sql

2、shell>mysqldump--tab=”./bak”test

3、创建数据库test1

mysql>CREATEDATABASEtest1;

恢复表的结构

shell>mysqltest1<./bak/pet.sql

恢复数据:

mysql>mysqlimporttest1./bak/pet.txt

在Win32平台上,你必须一个个的恢复文件,在Unix平台上,可以通过shell的文件匹配的功能,简化命令行:

$mysqltest1<./bak/*.sql

$mysqlimporttest1./bak/*bak

4、相应更新日志的内容是:

createdatabasetest1;

usetest1;

CREATETABLEpet(

namechar(32),

ownerchar(32),

specieschar(32),

sexenum('F','M'),

birthdate,

deathdate

);

usetest1;

LOADDATAINFILE'D:

/Server/mysql/bin/./bak/pet.txt'INTOTABLEpet;

常规日志的内容由于过长,不再列出。

常规日志列出了所有客户机发布的查询,不仅包括mysql,还包括mysqladmin,mysqldump,mysqlimport等,你可以观察这些客户机完成任务所需要执行的查询。

5、为了说明下面的操作,可以先进行几条SQL操作:

mysql>INSERTpetSETname="tes";

mysql>DELETEFROMpetWHEREname="tes";

相应的在更新日志中增加的记录为:

usetest;

INSERTpetSETname="tes";

DELETEFROMpetWHEREname="tes";

然后我们删除test1数据库:

mysql>dropdatabasetest10;

相应的更新日志中的内容为:

dropdatabasetest10;

为了恢复数据库,假设更新日志的文件名是wxy.058,假定该日志包括第四题中更新日志的内容。

首先删除更新日志中删除数据库的记录,然后用下面的语句恢复数据库表:

shell>mysql--one-databsetest1<../data/wxy.058

你可以看到数据库表得到了恢复,你也可以查看常规日志,以确定在这个过程中,test1数据库之外的SQL语句被忽略了。

第六章

1、首先对表pet进行独锁定:

mysql>LOCKTABLEpetREAD;

清空缓存:

mysql>FLUSHTABLES;

检查表:

shell>myisamchk/path/to/pet(在我的主机上,为../data/test/pet)

释放表锁

mysql>UNLOCKTABLES;

2、创建数据库的方法是:

mysql>CREATEDATABASEtest2;

mysql>CREATETABLEpetSELECT*FROMtest.pet;

恢复数据库的方法是:

由于表的描述文件被删除,因此我们可以创建一个具有相同结构的表:

mysql>CREATETABLEpet1(…);

为了节省时间,由于本题只是一个演示,所以你还可以从test.pet中恢复表的结构:

mysql>CREATETABLEpet1SELECT*FROMtest.petWHERE0;

然后,进入数据库目录,把pet1.frm文件复制为pet.frm文件,完成操作即可。

3、备份过程在正文中有详细叙述。

此处略。

第七章

1、原因是:

先考虑一下mysql_install_db如何建立初始权限表和服务器如何使用user表记录匹配客户连接。

在你用mysql_install_db初始化你的数据库时,它创建类似这样的user表:

HostUser

localhost

localhost

root

root

头两个记录允许root指定localhost或主机名连接本地服务器,后两个允许匿名用户从本地连接。

当增加fox用户后,

HostUser

localhost

localhost

%root

root

fox

在服务器启动时,它读取记录并排序它们(首先按主机,然后按主机上的用户),越具体越排在前面:

HostUser

localhost

localhost

%root

root

fox

有localhost的两个记录排在一起,而对root的记录排在第一,因为它比空值更具体。

的记录也类似。

所有这些均是没有任何通配符的字面上的Host值,所以它们排在对fox记录的前面,特别是匿名用户排在fox之前。

结果是在fox试图从localhost连接时,Host列中的一个空用户名的记录在包含%的记录前匹配。

该记录的口令是空的,因为缺省的匿名用户没有口令。

因为在fox连接时指定了一个口令,由一个错配且连接失败。

这里要记住的是,虽然用通配符指定用户可以从其连接的主机是很方便。

但你从本地主机连接时会有问题,只要你在table表中保留匿名用户记录。

一般地,建议你删除匿名用户记录:

mysql>DELETEFROMuserWHEREUser="";

更进一步,同时删除其他授权表中的任何匿名用户,有User列的表有db、tables_priv和columns_priv。

2、应该给用户分配全局的RELOAD、SHUTDOWN权限,使用GRANT语句:

mysql>GRANTRELOAD,SHUTDOWNON*.*TOadmin@localhost

->INDENTIFIEDBY“mypass”;

使用直接修改授权表的方法:

mysql>INSERTmysql.user(User,Host,Password,Reload_priv,Shutdown_priv)

->VALUES(“amin”,”localhost”,PASSWORD(“mypass”),Y,Y);

3、由于该用户只在user表中有权限记录,所以只要删除该记录即可:

mysql>DELETEFROMmysql.userWHEREUser=”admin”;

4、创建数据库

mysql>CREATEDATABASEmark;

创建用户并授权:

mysql>GRANTSELECT,DROP,CREATE,INSERT,

->UPDATE,DELETE,INDEX,ALTER

->ONmark.*

->TOteacher

->IDENTIFIEDBY"mypass";

也可以不使用GRANT语句,直接修改授权表:

mysql>INSERTmysql.user(User,Password,Host)

->VALUES(“teacher”,PASSWORD(“mypass”),”%”);

mysql>INSERTmysql.dbVALUES

->("%","mark","teacher","Y","Y","Y","Y","Y","Y","N","N","Y","Y");

第八章

1、由于没有非常好的例子,这里只是做一个简单的分析:

例如,对于表pet:

mysql>SELECTspeciesFROMpetPROCEDUREANALYSE();

输出有10列,对于列Optimal_fieldtype是建议的优化列类型,都是ENUM类型,在这里,species的数值有限,故可以改为输出所建议的类型:

ENUM('bird','cat','dog','hamster','snake')NOTNULL

2、可以用两种方法

使用SQL语句:

mysql>LOCKTABLEpetWRITE;

mysql>FLUSHTABLES;

mysql>OPTIMIZETABLEtbl_name;

mysql>UNLOCKTABLES;

使用myisamchk维护程序:

mysql>LOCKTABLEpetWRITE;

mysql>FLUSHTABLES;

shell>myisamchk--recover../data/test/pet

mysql>FLUSHTABLES;

mysql>UNLOCKTABLES;

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1