捌玖网络工作室's Archiver

admin 发表于 2008-4-17 14:44

[Zend权威认证试题讲解]第九章 - PHP与数据库

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。rWr.T N|VX
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
)l?ygr W 本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
phw#b ^2i
EW n5M0n4_{ h,~ 5B |-K!P6V%Q'cN%\2R
问题$X~rE e7@o

$?0jL.Nhp 1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)U6@Ni W5E5uaT

Rk4Vh1l+K SELECT * FROM MY_TABLE&V/E?!@2_z

$^I_WSM A.如果可能,用把查询转换成存储例程'\3K-eix^ O{
B.如果程序允许,给查询指定返回记录的范围
|WJ#Q(tRvi2M C.如果可能,添加where条件
x6e v!t{ u D.如果DBMS允许,把查询转换成视图
/[)k(S3VU E.如果DBMS允许,使用事先准备好的语句"?7Gh2{.]E

8O!b ?Gj,Id o QP.y#[
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
)pl ^2s/ef` o5Ee|`!U&Qz
答案:____________
9st`['w${N7{ !Rj/z*@&XeR
a7U,f+o2zTb`!q Y3{
3.内关联(inner join)是用来做什么的?
w2v F'a:}| FV5Q#zI)HIfS
A.把两个表通过相同字段关联入一张持久的表中
$cR(Vwy.fGx+c B.创建基于两个表中相同相同行的结果集i2Ub)p)Z&kUd ?
C.创建基于一个表中的记录的数据集9} ?d,I5]m.b H l)f
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集'y;^?SW4x%Zs-o i
E.以上都不对| tbN"`6z~!f k*X!V
'Y P dN9TW

R$p)N \Qn&r ~ 4.以下哪个DBMS没有PHP扩展库?
oxu's!w)u
3e~b m P6ar$A&|:xX-j A.MySQLD(}'VqyqyN
B.IBM DB/2xF/A#N1Q-Na.\2A
C.PostgreSQL
jwt;_[ D.Microsoft SQL Server9`M@V'[kb9x
E.以上都不对
1m1lRv!yV 7t+@g a3TO x9j"i!{
;Q,G{4?/fR2pt_ n't
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
C7J N|ON%I#J D SlRk`]iZ
<?php
#l'gZ:?|4X $r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
){~gav T%R}:n)J ?>
l,{3rr+|Z C%K|t7`$hfF
A.MYTABLE表中的记录超过1条*jyJ]'u},\
B.用户输入的数据需要经过适当的转义和过滤
1LuX8n'z4t C.调用该函数将产生一个包含了其他记录条数的记录F:u YL Y'D8D(N@'I/^'ea
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
u}#w5efUAk E.查询语句中应该包含数据库名qSy xk__#i9|O#AL
e-N}5S'O@4x7A+MjW
m2Q.{8V xv9T
6.______语句能用来向已存在的表中添加新的记录。
3K;by yEe/Np RX
X|Yw#U)G 答案:____________!kF3C.SuP(_
G b9G7Fex'oaj
#{*J8GKf2i%?(_
7.以下哪个说法正确?
o,}f UPP R*Xxp.]J
A.使用索引能加快插入数据的速度
!C&bwH\ B.良好的索引策略有助于防止跨站攻击
1O3}O Z@?Hd C.应当根据数据库的实际应用按理设计索引Gg @6G9U9i
D.删除一条记录将导致整个表的索引被破坏+@Q6NQXP9l
E.只有数字记录行需要索引
+U^}b p0M4n2P${
^,iV O }9k?1Q VEKs*OJOy
8.join能否被嵌套?uMW*A A,{*ga
#C p2O,d nO|+k$e4P.T
A.能 ~/hD:P3qE\&N
B.不能
`a}Fh(tZ
?r5\(bU:W/fp
,Bg].h4}VW+C 9.考虑如下数据表和查询。如何添加索引能提高查询速度?;b4td"_|x

U.l+KOJ0k|;Ab CREATE TABLE MYTABLE (6M |pOQh
ID INT,
{ kH8z} V `9G;` NAME VARCHAR (100),'Dst%FD| `DCz
ADDRESS1 VARCHAR (100),
k+P*? B4I ADDRESS2 VARCHAR (100),oXWKEQ)[?%E
ZIPCODE VARCHAR (10),k!T:QlGF!NYW%R
CITY VARCHAR (50),
'I AO*w\ T PROVINCE VARCHAR (2);M2P$m`;p L |f
)!\b)f;pd&e I~.V
SELECT ID, VARCHARO5Gr+b;z%|x
FROM MYTABLE
A8J]Dn+w4N9XLP WHERE ID BETWEEN 0 AND 100?1Rb]cMH ~
ORDER BY NAME, ZIPCODE
"aA$APo0f-D8dsP X$M:|e Jp/u
A.给ID添加索引
7jx3}\Y7ChYn B.给NAME和ADDRESS1添加索引
I*@'Ia.QS?+t4LQ C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引:^.^!Y8ny0^1{
D.给ZIPCODE和NAME添加索引:x.T7b.k7Djr'OCM ]a
E.给ZIPCODE添加全文检索#A&~;m] \x2Fx

v7\i0zT&DsKK dlZo6S&_/V#I
10.执行以下SQL语句后将发生什么?
'c/E GSHP w { L|7q
BEGIN TRANSACTION
[!h3U;K5fz%R DELETE FROM MYTABLE WHERE ID=1 YW9BF,y H~\4k8e2n
DELETE FROM OTHERTABLECt5EN oQe/^R/f'wc3Q
ROLLBACK TRANSACTION
YI1]%I'x b^ c
#{M0?7HR6L#vQ A.OTHERTABLE中的内容将被删除
*Dx!f9H-invso"x/W,Y B.OTHERTABLE和MYTABLE中的内容都会被删除
1UP#n7Y7}Fg0}M C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除 ~#C%]4x}J9pEM8ha
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化{i`6yO+ct
E.数据库没用变化7@p9|`!d bxxh.c

b{m"t0G6R&v s9E `-N%Q
11.DESC在这个查询中起什么作用?
$@J+WHQ {
M o3`yYm3\ SELECT *
n'|g.v q Pi] { `"[ FROM MY_TABLE
)j4?$Mz2z%Lc;wN WHERE ID > 0{#ae/Q:^/U3R
ORDER BY ID, NAME DESCD kQ p&~A/Qj

^.E S/K a7oa A.返回的数据集倒序排列.T u3CilV#j&?
B.ID相同的记录按NAME升序排列
}}{6}9p3GR-F^z W C.ID相同的记录按NAME倒序排列!x9l!i&`(bU+r/m%~
D.返回的记录先按NAME排序,再安ID排序R3qC e-p^
E.结果集中包含对NAME字段的描述^_(}t*cD t
ll ^}9M ~e5O/B

%P|{ n4v#q 12.以下哪个不是SQL函数?
E.S,w1SMQ6c 8k I)k:@I@9[
A.AVG
3K p$y~D/E B.SUM)jmS8rh%Cs
C.MIN
u}'Yk({i7hPL D.MAX
3o(M6d(wfr6I~h E.CURRENT_DATE()
*P|0R[B*r j@'d D aexk7Z
f:hf1FL O6\
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?-_F3f9L}NMh

']1^'\:Anp$S A.该字段必须有索引_2ZR:]ke1Q
B.该字段必须包括在GROUP BY条件中)E IB+CQB
C.该字段必须包含一个累积值
!Y r P4LIo4uC D.该字段必须是主键"bH:_%a7kN
E.该字段必须不能包含NULL值
3H@&e }2vj&R0h
w x H t(l)N
s C3q#vVeO 14.以下查询输出什么?#g4Tf p E ^wU.d

K[?-nt5X SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2L'|b)v*U)L.{
ON TABLE1.ID <> TABLE2.IDH"IN i+^eq
2GQY6d5}4K$l4w
A.TABLE1和TABLE2不相同的记录
0XVf)i't+? v B.两个表中相同的记录-R:mR@/uJ6o$t6pl
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数 f ]"F V B{_ G
D.两表中不同记录的条数~L4U1T[ YIt
E.数字2
6q/?P.YA K*D)V%br
A?h$rww;a ?P s|5wJ
15.______能保证一组SQL语句不受干扰的运行?t]9{B MeP
{-Ujv;U7yp.n+HX @
答案:____________GD*U1e` Pu
LmE+@1r)EHAy

}+AS-{-V!k
rc:vgIQ%IhWI 答案速查sW#u&O3VvD3u%o R!X
1:BC
;z4z'}5dl![;oO 2:WHERE7dd @Pq8z
3:B!z(|:~y_9R
4:E
rq]-lye9C{ 5:BD
4\:O4vBe#h)^ YW 6:INSERT!?)SN6h9yMo
7:C
+o(H(` b9y-KC/pk:Qi 8:A
;]#H w!PD@ KK@ 9:C&E^2WX.Em)I:J&e
10:E i.a)V9MF E
11:Cdcg8iX)pO(v
12:E
+A yd Q9|D'~ 13:BC
J$w4[;\"U_&xE+C 14:C
PhX|~R 15:事务
J@| w Cq7u/jW
\kg7eW ^-l )mGO)h GH/O~
{(V*V_ ___a
答案详解
$?j#UEV#Y [@D5e w
'PD$C:?IRE|-Y 1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。NvJ`2bW Z

9[f7en'z:d)vx 2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
}b3n!ap-J%b
fP\9? P6E'e~ 3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。7y YLr;x2DE O+Y

z3y`;fH?.D 4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
"T"@%sE_%EH/K 'RP\ R-n.lb I3J \7K%g
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。sSA!ilfU2\

:N&}#BC"N0nv 6.答案显然是INSERT。
)mk#} t(uxb6dsj9X
{G N$jPdm{6W:O,QE 7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
k?,b [c;O lX |8Ht"t!gZ:m9P
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
)us V1]#I4O
H |\.xYD 9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
~bf-?,S DXu Hv#I
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。Q cR-d/IQd
b II4gk xW0m$z
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。9H4B9["H2`9S5\

%^C.hJE;`)R 12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。3f2v"@~Yoh{
GH}0Npg
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
u+Y3G7N`?@5`%P y um rL@&X
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
0FXdqr4B Arqh *? G.^ZZ],T
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

页: [1]
【捌玖网络】已经运行:


Powered by Discuz! Archiver 7.2  © 2001-2009 Comsenz Inc.