捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。ISuKNn q
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。Sc c}/c R,CF6ygX
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。"{w,?5F"i
0X{8vu1|'a? Z
Q,D_9ykS
问题
O/E!KV!q g(Hnr u3us-W9P4B ^#@Q R
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
JB+H(|#[Q &\2PN8jj#QP}
SELECT * FROM MY_TABLE`xx:L8`Y(?"@

[z Y$csiZ_e A.如果可能,用把查询转换成存储例程-[0BP6Q1F\_l
B.如果程序允许,给查询指定返回记录的范围
!Ms D]u`8Tx C.如果可能,添加where条件
Cs Ub&Z z-} V \ D.如果DBMS允许,把查询转换成视图
pJ,u$Nb8C*m'h E.如果DBMS允许,使用事先准备好的语句u f?]r
D&FC:i,\

b L8}~Afl 2.可以用添加______条件的方式对查询返回的数据集进行过滤?I#Qz%p@[-f
Fx.y)fHr;m
答案:____________
G(v _Mv Jv *_DQE9BhgD#e
Z:_Kp"| n8Tc
3.内关联(inner join)是用来做什么的?(uM ?`sH
hs"W4L f:q)?m
A.把两个表通过相同字段关联入一张持久的表中*@a,mR)fg.Ww+w
B.创建基于两个表中相同相同行的结果集
Z ?9keU5p2Cy2x C.创建基于一个表中的记录的数据集@L8b4e7yq3\g
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集G(t5M l5It#w
E.以上都不对\@6{W m/u&Xc5x

kw4?q_ ^p:l ];~6b(ZE
4.以下哪个DBMS没有PHP扩展库?
4`t"nh;p v
p vz XTm"] A.MySQL-cLH s)fWC(Xt8O
B.IBM DB/27Q!dB8c$`Cb
C.PostgreSQL
sB:k&x4FWi D.Microsoft SQL ServerI8jxoZ noW X2}
E.以上都不对.h,i a2yY;drt
(Q Z2RtB4T"~#nO@W

jw]!jS3K.?W i5g 5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
q,R-sN"b!dG
eR!xCAXj <?php
.i1]@v[k:f-` $r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
$B*]t#x+`9J#O'E ?>t-k;gq|^Q

%|L.`LN1w r2[;] A.MYTABLE表中的记录超过1条2c*bX0Fh+Lx
B.用户输入的数据需要经过适当的转义和过滤
OV?_6d)s3RF C.调用该函数将产生一个包含了其他记录条数的记录3} P0L+}p)p
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
*z.N%y5P{ _k7l|,_ E.查询语句中应该包含数据库名
)d7^sg(m5xYj/P%@ V5C/l!vF:G

G$f Z1NIR#i*] 6.______语句能用来向已存在的表中添加新的记录。,|7v:_GN2BXL,T
L]!J;F#A?~Ej&?
答案:____________
8K\ Ja `}L *R p/Av z
JY,@*o/X:p
7.以下哪个说法正确?{LJ `U:|&R;g

$MbT*x!U%b8K F A.使用索引能加快插入数据的速度
m S3UJWR UE E z B.良好的索引策略有助于防止跨站攻击
;\mKkrT3E8AiR#U C.应当根据数据库的实际应用按理设计索引
2O5UPD%L D.删除一条记录将导致整个表的索引被破坏
Xv'v0th)m&s E.只有数字记录行需要索引
p]e#@_:N b )j r8XCrko

9_LU~o1CD;DEu 8.join能否被嵌套?
L*y~@n\Y
#C5N1dPxV+I2Q A.能
u&c hU2m7?8h(W B.不能
Or1~ya~3g
#kY$L;eQc
k P` OK,Zk2x 9.考虑如下数据表和查询。如何添加索引能提高查询速度?
$cP!@(D kSF){0P o.j5d,h&V
CREATE TABLE MYTABLE (
a:H,E8j cm ID INT,
.B[X!{Lik j6C NAME VARCHAR (100),3~/P'AD6F)aYR
ADDRESS1 VARCHAR (100),GsiXhc5V
ADDRESS2 VARCHAR (100),Wu0i$x2s(j*Nk-WOKg
ZIPCODE VARCHAR (10),@c.E$u0vA p%G
CITY VARCHAR (50),
!i7cBlv8v-^ PROVINCE VARCHAR (2),^0dR\"~~Qu
)$?[1Y j*HcC;E#h'rp
SELECT ID, VARCHARF8Z4p4n&K[
FROM MYTABLE
G[\ [:YF"} WHERE ID BETWEEN 0 AND 100 WiE9@ ok
ORDER BY NAME, ZIPCODE
_t-w~7sZ
E;uFLNdC?Ez5n p A.给ID添加索引
~W/Pkuk B.给NAME和ADDRESS1添加索引
wV9Ij&B3c8o C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引$H9jYy"zi
D.给ZIPCODE和NAME添加索引
5eJJ3_MX E.给ZIPCODE添加全文检索7af5P#s&F#V
6kT#BF7xF
0oh _[ Zk)y y
10.执行以下SQL语句后将发生什么?c:@|D*pw9? \0w

b-l2\7C)qsv N0TJd BEGIN TRANSACTION#LLV'?9vy
DELETE FROM MYTABLE WHERE ID=1
*a2D J,Gfd2I DELETE FROM OTHERTABLE7f#`T:l"JGeZ,wq&X
ROLLBACK TRANSACTION
2iq;Vi'nbyy
c4T7u O7M.L A.OTHERTABLE中的内容将被删除sq{ C,N7B"AD)M
B.OTHERTABLE和MYTABLE中的内容都会被删除'h%R o,s Mv6f
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除)N3y7nJab ~
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化k)t#kw9}s0m U[
E.数据库没用变化
%A+o'\dW~'@
XtAEl[b%Pz rTd5~hy8nw{_'s
11.DESC在这个查询中起什么作用?
c$JG_Pz
Fd^9di"T SELECT *
-BCJmZu3tk [ FROM MY_TABLE
3E7^Dl(h/w1g4Ws WHERE ID > 0
-Q3Z K]G ORDER BY ID, NAME DESC;n.E0j,Ul4nT

9g+G H%y$R#uW2`V A.返回的数据集倒序排列
~-BXHf_ B.ID相同的记录按NAME升序排列
!kS{r#Dm3Zw C.ID相同的记录按NAME倒序排列 Y2Q9^9W;a8xOM0KHh
D.返回的记录先按NAME排序,再安ID排序C+tep2Q\Yt$Yl
E.结果集中包含对NAME字段的描述Es0~Wp*B?d2SS2V*_
} K*` @/E}i n
D+p {6Q2T"] U
12.以下哪个不是SQL函数?-rY!Sm+])tDJ,~
\&?)gTA:yK
A.AVG
Kj N~'rVs0Z B.SUM?!JP]]5gbR
C.MIN R;vt$fl |
D.MAXed1g3Gxxd
E.CURRENT_DATE()7w1Y je| u
W*{$[ fj-jQ(R

:|eis:\ 13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
p*cx] H5\'E2WR
v SNjzO7iZ8z+[v A.该字段必须有索引$n7f_5f9q$Mn E
B.该字段必须包括在GROUP BY条件中w0hp-K y~ qe%b
C.该字段必须包含一个累积值R.t9T{.ux
D.该字段必须是主键
K0l3N9KVIg|l E.该字段必须不能包含NULL值q6h fh]H^ k Gf

jiUJD
-n({ g;Sl 14.以下查询输出什么?
'@N*Gqh&uF#\4g[
P5Z)_;@v SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
a2Bo s$t b:i%w ON TABLE1.ID <> TABLE2.IDjlC+WSKH
h6v6vQ%\
A.TABLE1和TABLE2不相同的记录QJ+NK.K)@1?/['xHb
B.两个表中相同的记录
Bk)iZT C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
WV-U%^K?0y D.两表中不同记录的条数
o2qLc2l a6fj E.数字2 @ c5Q2l,J5?Q|4fS

*t']%NL~_@8K
8{ h*KM!_%H5n^sY+W M 15.______能保证一组SQL语句不受干扰的运行?
|dWj$O *t.j2Nb!QCM
答案:____________ WP;p%Wm1Kdu"yC4M

$RI/}u] ~F [F,Jc#]\

'g7G P.J|`G.U7_xr 答案速查
/hl/ip/| 1:BC
&u yX)CH$mG,S 2:WHERE g#{4By9o T
3:B
Bz)T"UIw 4:E+X&E V}&j&hs!? z
5:BD6Z3n k,LfG
6:INSERT.Jd@jnG"U
7:C.Vtg4z3`lu]cs
8:A W,?/]$W_#V s6a
9:C
#AVs-f)f_U {)b 10:E tm MF1X3dX
11:C:@g$^w0Vp
12:E
gr(\#k}&hA1{ 13:BCbwV5e5C$i~']
14:C
$}B r(B-X 15:事务
%cwe b4^&v
y6OWfG!Ek%H.d *@q YaR;vGL
+VFj z9E8G I `n
答案详解WL,}*CLuF*OJ FH

b"j ]{0n1e9m:a 1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
(H(B/_jf,pd'g
mV,w Pk 2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。hV!f)A pj3l r

Y7@-S'}iqN7zk L 3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。:X1T'\+Zt3L,K`

%G A`/et(B%` 4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。~T"q-u+O]CYrB#j
rUL.iGOi
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。6{`!@eS`'K(Q
R_k,O0Z)M
6.答案显然是INSERT。6n Smkx8A sN
:p j{Sz%Z4B m
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。-}\6z2Z8o:xF
2Cz-gR0C2L%p
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
?o%h(^dz"IM X:ux A2b-}2|
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。&L9q3e2Wgv

"R9pC.X%u vVo 10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
J|e/nO
3j'M y {&lop4[$F 11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
E5o^F K3oz
wx t)c]jw 12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
.`'f AxB5Rg
8v~sMJ2nJ s#? 13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。%W1oo!~e4R
1Hj?)V|r
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
f1weN B| .S(zJW`j^\ _5cm
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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