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