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

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

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

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

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

toclearthebuffer

mysql>

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

SELECTUser,HostFROMmysql.user;

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

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

|User|Host|

|root|%|

|admin|localhost|

|root|localhost|

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

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

[mysql]

user=root

password

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

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,不比提供连接参数:

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

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

LOADDATAINFILE“pet.txt”INTOTABLEpet;

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

LOADDATAINFILE“pet.txt”INTOTABLEpet

->

LINESTERMINATEDBY‘\r\n’;

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

mysqlimporttest‘pet.tt’

或者使用:

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

第四章

1、创建表:

CREATETABLEex4

dataFLOAT,

birthDATETIME

);

录入数据:

INSERTex4VALUES(RAND(),NOW());

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

select*fromex4;

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

|data|birth|

|0.830329|2001-01-0121:

21:

10|

|0.531143|2001-01-0121:

12|

|0.164729|2001-01-0121:

13|

|0.230213|2001-01-0121:

14|

data列的平均值:

SELECTAVG(data)ASaverageFROMex4;

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

|average|

|0.43910377845168|

data列的总和:

SELECTSUM(data)AS"

sumofdata"

FROMex4;

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

|sumofdata|

|1.7564151138067|

SELECTMAX(data)AS"

maxofdata"

MIN(data)AS"

minofdata"

->

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

|maxofdata|minofdata|

|0.83032947778702|0.16472874581814|

data列降序排列:

SELECT*FROMex4ORDERBYdataDESC;

|0.830329|2001-02-1821:

|0.531143|2001-02-1821:

|0.230213|2001-02-1821:

|0.164729|2001-02-1821:

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

select*fromex4wherebirthlike"

2001-01-01%"

;

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

select*fromex4wherebirthREGEXP"

^2001-01-01"

3、为student表创建索引:

ALTERTABLEstudent

ADDPRIMARYKEY(id),

ADDINDEXmark(english,chinese,history);

这样查看创建的索引:

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表创建索引,这次使用另一种方法:

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

查看创建的索引的情况:

SHOWINDEXFROMpet;

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

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

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

4、删除pet表的索引:

DROPINDEXnameONpet;

或者可以:

ALTERTABLEpetDROPINDEXname;

然后再用SHOW语句产看可知

showindexfrompet;

Emptyset(0.01sec)

第五章

1、shell>

mysqldump--all-database--opt>

data.sql

2、shell>

mysqldump--tab=”./bak”test

3、创建数据库test1

CREATEDATABASEtest1;

恢复表的结构

mysqltest1<

./bak/pet.sql

恢复数据:

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

);

LOADDATAINFILE'

D:

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

INTOTABLEpet;

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

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

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

INSERTpetSETname="

tes"

DELETEFROMpetWHEREname="

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

usetest;

INSERTpetSETname="

DELETEFROMpetWHEREname="

然后我们删除test1数据库:

dropdatabasetest10;

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

dropdatabasetest10;

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

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

mysql--one-databsetest1<

../data/wxy.058

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

第六章

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

LOCKTABLEpetREAD;

清空缓存:

FLUSHTABLES;

检查表:

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

释放表锁

UNLOCKTABLES;

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

CREATEDATABASEtest2;

CREATETABLEpetSELECT*FROMtest.pet;

恢复数据库的方法是:

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

CREATETABLEpet1(…);

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

CREATETABLEpet1SELECT*FROMtest.petWHERE0;

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

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

此处略。

第七章

1、原因是:

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

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

HostUser

localhost

root

root

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

当增加fox用户后,

%root

fox

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

%root

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

的记录也类似。

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

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

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

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

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

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

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

DELETEFROMuserWHEREUser="

"

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

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

GRANTRELOAD,SHUTDOWNON*.*TOadmin@localhost

INDENTIFIEDBY“mypass”;

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

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

->

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

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

mysql>

DELETEFROMmysql.userWHEREUser=”admin”;

4、创建数据库

CREATEDATABASEmark;

创建用户并授权:

GRANTSELECT,DROP,CREATE,INSERT,

UPDATE,DELETE,INDEX,ALTER

ONmark.*

TOteacher

IDENTIFIEDBY"

mypass"

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

INSERTmysql.user(User,Password,Host)

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

INSERTmysql.dbVALUES

("

%"

"

mark"

teacher"

Y"

N"

第八章

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

例如,对于表pet:

SELECTspeciesFROMpetPROCEDUREANALYSE();

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

ENUM('

bird'

cat'

dog'

hamster'

'

snake'

)NOTNULL

2、可以用两种方法

使用SQL语句:

LOCKTABLEpetWRITE;

OPTIMIZETABLEtbl_name;

UNLOCKTABLES;

使用myisamchk维护程序:

LOCKTABLEpetWRITE;

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

 

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

当前位置:首页 > 高等教育 > 其它

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

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