捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。4m+cj"V|
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。;?)o3DEzvdNUk {
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
#FBX*P!gUk
i,k,L~+\#}T *C6j[OomF7OQ b
问题
4LZcQ9j
G5@5E D1uE'MJ5M 1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选) m$K1G;fq tI {

ia}@N SELECT * FROM MY_TABLE
k ~5M+{`+^
o,C/U?gB)Y4J4m-{(] A.如果可能,用把查询转换成存储例程 QVM+L2|C&m
B.如果程序允许,给查询指定返回记录的范围
e/R8cj e4S7^8h C.如果可能,添加where条件'f9S1z/^.Y}H
D.如果DBMS允许,把查询转换成视图
R|lq4lb l-i E.如果DBMS允许,使用事先准备好的语句&j#w+dXZL E5w lg

9NbIDj? DV 7~ ^!T-t^~,i*a,]
2.可以用添加______条件的方式对查询返回的数据集进行过滤?+pnY"q[I-f

M S,S,Vg1q @!D8L[ 答案:____________
2{!w v ^y4Jh8a$[+L _cJ du(P~
gG])ei!O#D j
3.内关联(inner join)是用来做什么的? mxgu8k!\,O

SA!wQe4v A.把两个表通过相同字段关联入一张持久的表中^*K)Or S y7w,I:^$|
B.创建基于两个表中相同相同行的结果集
F)D x6pN8Ha;m%] C.创建基于一个表中的记录的数据集
4?;d{RW!BU D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
TMk*AA GR E.以上都不对uZ4`e`8ye(i$x:l

{2jI7rZ&U-m4s bs P_Q3v)Y|*A
4.以下哪个DBMS没有PHP扩展库?2Br'R%C@

hs0O#~r A.MySQL
JE[J&Z1d { B.IBM DB/2pv9[c$DH I"JH
C.PostgreSQLp3V%n!I-V^)z;Fv
D.Microsoft SQL Server!v(I(S%T }"r(pzc+K
E.以上都不对
$}RF!p.]\ Re T/f&RI-mz p

fB/? cp ~ h%N*T6S-Y 5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
l/e i3r Q
.x!q2]|,aL+SkA <?phpM5hOi7N&iUe5yW'o
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);a\d:a(NncQ
?>+e0v)m:Y5CP"s
ls(~&R Ga1l
A.MYTABLE表中的记录超过1条
T:U3r `?6o_,N,e h B.用户输入的数据需要经过适当的转义和过滤@%p|_B]&QMK
C.调用该函数将产生一个包含了其他记录条数的记录 c!wp#G"~
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
9S_ ``Li8A E.查询语句中应该包含数据库名
8s}hb1J'T3Eq K-c.h$_]f%I
1W#Q j%r8R$IbU
6.______语句能用来向已存在的表中添加新的记录。oTCtb_

(of)vW{,v(U 答案:____________
)S#Jo!B ~ C JAx "x'L_1|5Sv+t+Zq
V*N.P'l b vM^
7.以下哪个说法正确?
z~4D%D@)l3u ~@?
Kt:yK(ayq1k A.使用索引能加快插入数据的速度 s XrB:qB h9^p1d:G
B.良好的索引策略有助于防止跨站攻击
0G+OSkdo C.应当根据数据库的实际应用按理设计索引
3[%RGfH2] D.删除一条记录将导致整个表的索引被破坏
V(\YHLxf E.只有数字记录行需要索引U3dh6a(R'rn*^
m"ph} lJx0ct*i

b3@\5w;?6go3N iB 8.join能否被嵌套? vq~bhR(`
mE;i-mV:M+Q
A.能
bW{[{ B.不能6D5\ cCo sNl8R7[

KP| [/Z G }"Tw,E{tJ-c%V
9.考虑如下数据表和查询。如何添加索引能提高查询速度?zx6ncX+{!y Wo#q

+f7iS/uw'Jr CREATE TABLE MYTABLE ()t0W GU'@B'hXR'r)v
ID INT,
]n4],gl$c NAME VARCHAR (100),/yG,E7[%N4V0h Yu
ADDRESS1 VARCHAR (100),
UOI Jz9zF ADDRESS2 VARCHAR (100),X$zm&p4V9e
ZIPCODE VARCHAR (10),,?UR'A]3IsU ef
CITY VARCHAR (50),
}Z-J's_;z,Uw` PROVINCE VARCHAR (2)
(b)}yC.k$K'Sx )%v3R9m[(j)gUr
SELECT ID, VARCHAR@K$EBU Bhbz
FROM MYTABLE
+w.@-`ai6[3P2] xY WHERE ID BETWEEN 0 AND 100
ZL6`t-_d ORDER BY NAME, ZIPCODE
S(W$r;v,]!j?Xk ,pDZv#d)}+Dl
A.给ID添加索引5B;pd On!q1I9{Wq&t
B.给NAME和ADDRESS1添加索引lzTaq~
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
nk(x^S a)v \ D.给ZIPCODE和NAME添加索引~4q:^? T,{'s,t
E.给ZIPCODE添加全文检索-zQ:PO2~C$A1w
F"Y*qc*yHX[
#p {8v~G]-uD
10.执行以下SQL语句后将发生什么?
8Y)|~;B6im l:o HIB'N$m`
BEGIN TRANSACTION
*x"R&l_P.v,n DELETE FROM MYTABLE WHERE ID=1o`"o eC5x2ay7B&U
DELETE FROM OTHERTABLE
,y9OP6ei5BD ROLLBACK TRANSACTION
ovX&g!R
#}!Iu u@0r3W+Bm A.OTHERTABLE中的内容将被删除
4L4d9?*^}E[U q B.OTHERTABLE和MYTABLE中的内容都会被删除
(uhH$p-L6\ C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除*g.Fc#W6f F@E
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
9aN'ba,Rf,E E.数据库没用变化s{K4Q U0\ [h6@

c7K&T.w5ae$a !QG0{$VuxUR
11.DESC在这个查询中起什么作用?ZF2I?z%kx
5Ozf.gp g*I }&^
SELECT *
}X+o4`;~~,P FROM MY_TABLEQ!{w%g&a'q n5@ ~%A
WHERE ID > 0
a#R,DmE4|rZ j ORDER BY ID, NAME DESC
-hxT&mS;IvA:e 2Y c {hj4s
A.返回的数据集倒序排列5VSk9q5\J"R
B.ID相同的记录按NAME升序排列
-ry*S&^(X*? C.ID相同的记录按NAME倒序排列#DR,_(R vS
D.返回的记录先按NAME排序,再安ID排序$|%[T|YR#?
E.结果集中包含对NAME字段的描述
V5G"E&|X d#GdP~3n
's,b&QI&e6Y\ Ot$^J Bu8ww6A J
12.以下哪个不是SQL函数? Fq z+[K4D'@;B

8IQ o+rZa?9D#MR A.AVG0QKMr&_/T"^l s_
B.SUMQ:}j1pU AF"E
C.MINiL'nR$Hn6fj
D.MAXch&]l*W1n E1j
E.CURRENT_DATE()1LJB$a7J
D-\6~-I S

pW pm)F,k 13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?] s0Yo.KH~9^Rr

q W/Y#c0JJ azb A.该字段必须有索引
QtYc#? pl B.该字段必须包括在GROUP BY条件中
wF/vf'D#jH$^ C.该字段必须包含一个累积值
`:|l3otjQ%MLg6?Z D.该字段必须是主键P1@ \8YU8\5yZ U
E.该字段必须不能包含NULL值&zZ-CE/z-a5x

;?!oYm5N;Ta
"Si#n~lE$c 14.以下查询输出什么?5_2~8t0aW(S xWa7d

H*vq{7m SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
'L,itl/c ON TABLE1.ID <> TABLE2.ID
"PY&EOz.M jeZ*@5A
o7{ ai3_n{ A.TABLE1和TABLE2不相同的记录,{'Sd$R.vVy$g2]
B.两个表中相同的记录
N1p8{5x Vm C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数hd,[&ds1bz8@9Z&t
D.两表中不同记录的条数
_r(Zl)}\ z E.数字2
nl ?3Jtte
,]PFapq&kR
]Z\Gs 15.______能保证一组SQL语句不受干扰的运行?
3T+WE K f ~~vK
@x)` `Bc K 答案:____________'|"?NHywx
&Nd1S-PB/H

R%iXx(p.y |4e YB"o0~ J
答案速查
b"L k&Dzq5\ 1:BC
KE6l"Nh(c o)n 2:WHERE
Khp+v2p*uI1\JA 3:B
M hl(A|_$Y]4d'\ 4:E
Z6o2D \#e.h 5:BD)K0P\/]?8w&c(q'`(g
6:INSERT
1uVhu8h"D vF 7:C1V%@ w+k#U+w H1\
8:A
S&B'B8h O[O 9:C
'b,EZ-em1R2f&n#Yw 10:E-fA5Q(]*{YXL]3k
11:C
6h-i+ws.V m%IP 12:E$Y2N4_u DB6C;Y
13:BC
)tnru;]2S 14:C
$|"DB C3m 15:事务/S"\`*Q6M
8k1Sa2xb

@9BBo"WsK Iz:z4Pz \6k
答案详解
#xW8T3|C8AD f.XV QL:lp3{
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
$K2D.L+}@X2aU)J
u V:fg#W aP:m 2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
g;IL;u$gt
ae8E _6Rm~}y]%n 3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。b+\"{~5Q!M(y `?,Q/}x

%m'? k H S;jv[\ A@~ 4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
pS;[:\S
QdhEBX"?/o 5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
C#y-t{ ^\
aJ(f#_h/} F 6.答案显然是INSERT。P c vz \

.U2pSgj5c 7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
Om2_UU9M
S'Z+i`pW'h 8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
%jRDurVtiP
,W1b;G6G-c@K$}4i 9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。BqL0H~rUW
)r0K c0A+@T&JX
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
"Ib!rPb
!t8dE a#g OzjQ 11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。SsiQ[

)n.aMb+Q!Z)ET\ 12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。(U,u m4et$|Jq

$o'{v5]jn p'n 13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
h X"`4`Ec7p$[;n
GP;w6N eUK 14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
5vD3[4d?,n
fZ6sV2\f]%_ 15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.