捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
K u&?"P$Bw ^pnl PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
r?;n4X*w1[U 本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
Y-H0Y\AyH
%p*B8{og)V+R
O%W-HEf*G 问题
5x)v&~5[ E~1],f n{_$q1A jAZB l
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
ym3sexk4N9Y gF#xX)Q(KA%eu,M9Y
SELECT * FROM MY_TABLE
~~/E8`?RUG2O4? ?Ro8fp$|.z.k e bi
A.如果可能,用把查询转换成存储例程
j L&P|/O%E5G)a6Lp B.如果程序允许,给查询指定返回记录的范围|w"Vz~NE#X
C.如果可能,添加where条件;O zH3Ig6l5g
D.如果DBMS允许,把查询转换成视图
,N+RY.T*u E.如果DBMS允许,使用事先准备好的语句5zrc)fD%{w [~

S4V c O;f$](pu \ B'n/xqF2R9y
2.可以用添加______条件的方式对查询返回的数据集进行过滤?8M0{3_C2Y;S,vd

izy`*jUl 答案:____________@[i/b#@+w*T
G0PH/a5f9O_ak_
Y(QT*Rk-G0xa,N
3.内关联(inner join)是用来做什么的?afC(q M&BY

W-]UV-i A.把两个表通过相同字段关联入一张持久的表中eG0T0d,C``
B.创建基于两个表中相同相同行的结果集
&]R)AP&l S$FA C.创建基于一个表中的记录的数据集
_ w]1bwy gJN D.创建一个包含两个表中相同记录和一个表中全部记录的结果集#|8Bj I5]cI-c.f
E.以上都不对
/zp V+fG_+B2k9@
J5U'f?C gaW5uZ "D"wd0GXM K s
4.以下哪个DBMS没有PHP扩展库?2K7}{x.E-|
_B7xtr d `5nW
A.MySQL
!B%dJ|9s,h B.IBM DB/2
;h,zA T_(_3E.`&@ C.PostgreSQL
E_#R.xl u!b1_r] D.Microsoft SQL Server;c)])\m!|k
E.以上都不对
oU z5}UR
R.b%oh.t8N|
bX"c zz0OX.r0i 5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
UH M u?]8[1b FQ
X-y#C$Z3Iz <?phpb+x nc,RPvJ
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
*G@BDymx!` ?c { ?>
m J)T1qv#`b(?
4\:ej$h.is2Z A.MYTABLE表中的记录超过1条
7E?.\1r3g oc B.用户输入的数据需要经过适当的转义和过滤|1n.GM S'I/a'c
C.调用该函数将产生一个包含了其他记录条数的记录
zw-q%Ur@ | D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除2d+eFr8L/HD
E.查询语句中应该包含数据库名
@)q0{FSI!G p~i;XA+R`(_
}+XYo|1]
6.______语句能用来向已存在的表中添加新的记录。,O V;b/u&R7uV ? T nL
Yn)w`$S@0M(P
答案:____________
G}v'eLzMd2LS Av,{'x5E:RzcRq

Q\'u6`,at_ 7.以下哪个说法正确?
eg&M0f,V(C
6\odv8qK&V3[*Q @ e A.使用索引能加快插入数据的速度
&NT){1Xf'u B.良好的索引策略有助于防止跨站攻击
$]:q&v oDl[*C^ C.应当根据数据库的实际应用按理设计索引
f}ky Yy8D*V` D.删除一条记录将导致整个表的索引被破坏
/Db;La;^/UKsX E.只有数字记录行需要索引
g `2FHeG'WA
*z'`usX(J]c 3TyTG2M;U)|
8.join能否被嵌套?n ~S7|F+NVX
hh+|]C/}(r5N|%Q+j9x
A.能
ua9xeSd B.不能 X7B9Y#T/E4j

q@&h)P0f r;|Orj
h*Bv.rf 9.考虑如下数据表和查询。如何添加索引能提高查询速度?g#Os/M5}3|7k1s
3X(H5Nd~
CREATE TABLE MYTABLE (
!H)`-`;lV ` h!`m ID INT,
j'\ { ]y u/olE` NAME VARCHAR (100),P0Z*wemT
ADDRESS1 VARCHAR (100),E/P+`1Cv o,F
ADDRESS2 VARCHAR (100),3_)zKJ3S8?E"|!k
ZIPCODE VARCHAR (10),
e;{8]rU5kP CITY VARCHAR (50),
:p^g*},A1C(cud PROVINCE VARCHAR (2)xJ6n$~Bh0r {q
)h \*O x0\4f*hd;Ut*\
SELECT ID, VARCHAR{:X\G;MI*o:q
FROM MYTABLE\%AwM7c*Q,w{$j$XG s8jq
WHERE ID BETWEEN 0 AND 100'l,G?'Qy;_3zN @
ORDER BY NAME, ZIPCODE J+GBMX ^

K/t |^ x3Y#Y'q$G A.给ID添加索引
a7VV UWC B.给NAME和ADDRESS1添加索引0y]*u-dkb t*T+nt!Q
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引N N lH+u:P[/]
D.给ZIPCODE和NAME添加索引Pv/W J7|i*P5t ]q i
E.给ZIPCODE添加全文检索
Dw&om8zr9o ;^3t(AK A S8L
OF3~9WdY1~
10.执行以下SQL语句后将发生什么?~!\R[M }7q
,u1r ~(v7u4g;hH
BEGIN TRANSACTION
u2B9^1R3QBB [_ DELETE FROM MYTABLE WHERE ID=1lH`J3@V1H.wJ1KJ,J
DELETE FROM OTHERTABLE
RN~:b5y,u r ROLLBACK TRANSACTION
\)Q-bE^ c
9OQe'S h$V:\pJk A.OTHERTABLE中的内容将被删除!~-pT,~Z
B.OTHERTABLE和MYTABLE中的内容都会被删除
a;nO3WrV C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除-l}n:k0Y!Q-lg9Kjn!~
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化:L ~0SyM]N
E.数据库没用变化?2JF/l"NfE{ N[:]

9^J~kyx
;YgK5WF Bxe2EIV!P 11.DESC在这个查询中起什么作用?#VxI,A\:F:P.J\)\

b-DB ~ ^"J ^,p SELECT *F8T)jg&h1y
FROM MY_TABLEpW+By0A+Z
WHERE ID > 0
/j x'AN$tL ORDER BY ID, NAME DESC
`T,e{;?hZ1y
)F U,B3f6P A.返回的数据集倒序排列2g*r"M#aN4w
B.ID相同的记录按NAME升序排列#nL1u9}v*cV(s[
C.ID相同的记录按NAME倒序排列I(X&f"OJc
D.返回的记录先按NAME排序,再安ID排序 l Ubar4~Jm6?8_
E.结果集中包含对NAME字段的描述 ^7i5a8x}3ZHs[:f

+F};o4Mx4T_t4[ 2t}{ GI:x7a.[
12.以下哪个不是SQL函数?
/n;?Ye+|} T
%w!Aa4h5hk A.AVG
-}u+z0A ZP']*D6J B.SUM
#~Qrq.nU;p6W F C.MIN
3@5TpONm*g1S5q9R*f D.MAXy ]6r,kf#p'A
E.CURRENT_DATE()@l_LFF

+[P)j/] IB.Lwvr
(m3Wc,B"f!^.I[}'J 13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?/R_/jN{Q
S G_-gG.X
A.该字段必须有索引r4w:z:Y^5|+W
B.该字段必须包括在GROUP BY条件中
`C"j'w#_ d Y C.该字段必须包含一个累积值LJYB YAj
D.该字段必须是主键
-V/y6c.bF+E0O E.该字段必须不能包含NULL值G'vy0sJ O(H4E*q5q

pxiFto /SP}i'E9b
14.以下查询输出什么?
!]GP+n3[] z
xHL:V+G1M|z SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
4dR3n3T$bJE ON TABLE1.ID <> TABLE2.IDEIEGz [

?J+Ho$XU A.TABLE1和TABLE2不相同的记录&d;H(~3B } xYd1pg2[2]
B.两个表中相同的记录
'b(dT6c!q[ C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
7no7dQn6f-R D.两表中不同记录的条数cz"s-b#V*U
E.数字2
Ml6FN(SR9Qn
U0^Ri0f P
7? PM+u0{P@ ^ 15.______能保证一组SQL语句不受干扰的运行?
rL IN;rC-F
){S.C~#Yi8V] M 答案:____________
^L.g:e@| ]?8v(~p$e

!w HPn"N}!u
gU$SjG'Z-?.V.Y 答案速查R1f*XB/n| }&|!iT
1:BC ^"d8f3T7OS8w/P&T_&v
2:WHERE*[6nd@{ sv
3:B
.l2l]YS,_ 4:EN5{%@5lA |%rP.b Ox
5:BD
-g+G.q+R Y6T/a+c 6:INSERTB9G:I8[TnxQD a
7:C
TVS+]A)d/}sa 8:A5Vwd)NjX"Ag
9:CrG|*u.yZ Vu
10:E
{^M};b 11:C
)ZR+y-c4X 12:E
H"zd sYL | }#} 13:BC
b,a9D,?#a#YeA$F 14:C
E:Mm-[m hg)QL:e 15:事务'lS"Pt,`[#O
A I,G"m^

O5B TrhW&B#p*?
b6by[FTQxJ2v 答案详解
kp2|#bL_$YV8}$Qd-g
&Q2| q_q.x@ 1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。8]nf'F$OZB
O0O-FKS
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。/g(Er$t#v,Q

/f\4oPn*@{ U 3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
3pr0a5R;x6Y !|#hf-mh8YW
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。&P%R*t-L'I#X

h zKi_$T-ia 5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
p1Op/gkuBVF /xE&@7p.`&fV
6.答案显然是INSERT。
q9U7r#r&J cY,p 2fa#Ik]N9t(|5b
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
\(p'FFi\,[!HU
;d0V6zxT8hI+P 8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
u$?4WbIM/X +DLsSwQ)`KP
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
1H7t?dbn7f 1{#z8kV_
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。~G{']:AM7X

Z I9i y8TF'Dt| 11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。 ]PI!~ @cQ)?@.m

5]c,nV-s@ 12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。#df+W6E,n.P

am+M(s2W9h$U5Do 13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。*pP6C7R'r%v&|

{5p:k~a }S 14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。 `;vl3s3ln

*ZLW8zG:KLU#P 15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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