捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。7?5ZS k)d o p2\
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。#V9E:T(l\|2_
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
&`1O-cv1s zAV |/Vs?0b(X&\

2W/[ Y[5Y kt4D\ 问题
0Zl0l `L2t(UD
-z y L5Eb q)^@ 1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选);lt s i7{l_

s)d*rvxGw(T SELECT * FROM MY_TABLE8EWJub'~T

Y%GeTbli A.如果可能,用把查询转换成存储例程
:L4v4?w)c ~:F s!u B.如果程序允许,给查询指定返回记录的范围
F2T})i4ZeUI:G;p C.如果可能,添加where条件T,w6f$b2^ L"M*N
D.如果DBMS允许,把查询转换成视图b v c"@ p!h6a
E.如果DBMS允许,使用事先准备好的语句"U.C~,iM O+o4X,{

,YX[,gR
%g eA'?n q:M%V3_#Y 2.可以用添加______条件的方式对查询返回的数据集进行过滤?| M4Yq%F\
's4M[,[n
答案:____________&V @,yK%s:Z

Y%^!Bu b ?1X;qs%y+Ayy
3.内关联(inner join)是用来做什么的?H ry Y K_aVB3B

s-YP @2NQ,t8J A.把两个表通过相同字段关联入一张持久的表中Z:cty(^:i
B.创建基于两个表中相同相同行的结果集
:uwC5h,Jd0\G C.创建基于一个表中的记录的数据集
lHDi Sw D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
Kcs g Ns3k E.以上都不对#[T!Qi-k7XPd
] O7T#P-\bn[~

5_T#ltZ3} 4.以下哪个DBMS没有PHP扩展库?$Za.@1i4Yv7z
Z,R]n T.S,gB;dZ
A.MySQL
m)Z U ss7OQy B.IBM DB/2
!R)f E[ t!S C.PostgreSQLX-dg2d2u
D.Microsoft SQL Servertv ~1T,Jm!s&Cv
E.以上都不对 Z#] ok^!m9c!h

(o*N7c3u Kxd{
}"O"tqq 5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
2h+r0H'n:oZ&t2cp
#w?;VB3~(jyr <?php
\ ~0l5E%u(E Bc.iCwW $r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);n%? Ny1Z
?>
;S0\+\zpF
#B3|!rb~ A.MYTABLE表中的记录超过1条
&izB(pNg,_#~ Z B.用户输入的数据需要经过适当的转义和过滤#I{L3F"e~`
C.调用该函数将产生一个包含了其他记录条数的记录
#kAT&tn B+?'u D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
Fsk N.`L }A { [ E.查询语句中应该包含数据库名$S`V7kp'\C
_gC ?)a:p*ODp-u

)qa9ug Cx8t0jM 6.______语句能用来向已存在的表中添加新的记录。 W:U3Ic}(Th#j n+a

IUF0\X;P 答案:____________
3{?1d/_| { T0Q
$` X/KDP(U U
]@V0rPv5U Y3y 7.以下哪个说法正确?
/XR(Z1P%{PI5[OT"{
T L#X9{{"l2V3T ?/U A.使用索引能加快插入数据的速度!n e$Vs i)xI0r
B.良好的索引策略有助于防止跨站攻击 xN[bOpW
C.应当根据数据库的实际应用按理设计索引
e0D&@ rI D.删除一条记录将导致整个表的索引被破坏
N _SJA,J E.只有数字记录行需要索引,T)Z\kTa;JxK

+`7^:J!d2y,e C*~wQ+w'mS
8.join能否被嵌套?
(D4A5g$`D.H\AWT!NK
!?D/BS?Q,KX2N A.能._o zK9i}2{%b A
B.不能
^ y9`Bz+{5sG"W
o5n{8h"Kx4wnq6tO \#~o`Ep7YP c
9.考虑如下数据表和查询。如何添加索引能提高查询速度?VyiM/c7MrH!x
$eYE/Fo1y$DD%`I
CREATE TABLE MYTABLE (s-n^ B'B[
ID INT,(m4LN7r:d;D~%C
NAME VARCHAR (100),
%L~zv%@M*xe*? ADDRESS1 VARCHAR (100),$Y9y1Dv0O5Yy0@{ HC|
ADDRESS2 VARCHAR (100),h6x$dxB0j| S
ZIPCODE VARCHAR (10),
p+c/B$^Yq-? CITY VARCHAR (50),
*Nz"n*qH PROVINCE VARCHAR (2)
P0G3J _ Lh6tN )
G[IC y*e SELECT ID, VARCHAR
Bl DL:O FROM MYTABLE
Bk {4|p V-d WHERE ID BETWEEN 0 AND 1008f xtdp
ORDER BY NAME, ZIPCODE
5v+n[(~oQ'S%D;s
2IDCp4]Y#j{ A.给ID添加索引
)DOECC4HAWH B.给NAME和ADDRESS1添加索引?7i+y*\z&]5k'HT
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引4gRCR"KfHMB
D.给ZIPCODE和NAME添加索引ri a,{Q X
E.给ZIPCODE添加全文检索a2P"j4tctv

;{^;U's1Q@k/? j PH
:]0WvhAJ9? N 10.执行以下SQL语句后将发生什么?R.U,I?N,_dUx

&s+Z)Xgt3p N BEGIN TRANSACTION
2f"~\Aq9~3a DELETE FROM MYTABLE WHERE ID=1
;S{(V*m jy s DELETE FROM OTHERTABLE-T!oQ.`0ykyq
ROLLBACK TRANSACTION:C$_ Ou0mLP@

Vd9U ^'|[ A.OTHERTABLE中的内容将被删除
i'i/A"@.Q9UdD B.OTHERTABLE和MYTABLE中的内容都会被删除
B7c1s-h L3S C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除O:P8O @8OW
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
(~LF o"k h E.数据库没用变化.fdQaB"J.M

u1g-zHWkI;X 2|3AMlZ/H$b
11.DESC在这个查询中起什么作用?^M-aE8r u$T(s
&V~ J\mL8C
SELECT *&yE6XR4i
FROM MY_TABLE*c HVm,d5|
WHERE ID > 09v"OMi*wb
ORDER BY ID, NAME DESC{L-e#EzWN&~;pT@
.~"R]{z
A.返回的数据集倒序排列A/L?z3]fl
B.ID相同的记录按NAME升序排列 dr'`Ax;}x
C.ID相同的记录按NAME倒序排列eAeh{ wo&CW
D.返回的记录先按NAME排序,再安ID排序
K+LS2S[@T5Y/L E.结果集中包含对NAME字段的描述4d0d.{.e&z|j+A\

"GQ)k9amS:d .j4j[`.SK
12.以下哪个不是SQL函数?H s|,?x7I-w

pV1o+j-F4eK A.AVG V1aD9|@.^
B.SUM
I)t5b c ] yS5q C.MIN._-E4{%Oy~ Q
D.MAX
Ro[0YXn N` E.CURRENT_DATE()
:k/p4?[ M w0o
7t;o9Cb PO T:b1FQhJ9K
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?RZx!Do'oo9nN&_t,Zc

mx"XG a A.该字段必须有索引I)u!QxOs'R ?xs9CM S
B.该字段必须包括在GROUP BY条件中
V3Zaf/G C.该字段必须包含一个累积值
2RTK;p5^Xm$P)W D.该字段必须是主键
?.H@`l or;B E.该字段必须不能包含NULL值Vd;t [^/^;X

xiv;r[(@~o
.E?)tk1L 14.以下查询输出什么?
cE8uF'lr3z
5N&^P9E A{(p/Q SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
7W'm1x;i(FIi K ON TABLE1.ID <> TABLE2.ID
pt6AF|$AD 5d ]!R'|X%xK!lYcL
A.TABLE1和TABLE2不相同的记录
\q jb(]g B.两个表中相同的记录1}P:U(m8nR:A
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数VSE cVO
D.两表中不同记录的条数0hd$Xp a
E.数字2%R4QuS,Q*| f:v

}%L:fJc*qm1KcP 7~%kHz#Rnq'LU
15.______能保证一组SQL语句不受干扰的运行?\5[2u [9yN I;mi}

k(l"[_"^ m{ 答案:____________v${s\/e3P7^Ig1T|
uqe"k]v5y

eH2B6[V"L)]5]3r ^
c3AsWg9R~ 答案速查O-va9F szq Sf
1:BC
C0_6O+X@4H{!c 2:WHERE
1O%f1b6@-fyR.]_ SY.| 3:B
K i` sk(Y 4:E
]"D-HP"tCXj*h 5:BD)MV#u esg(s;p
6:INSERT
:D6T.Y^r#W 7:C&K(pK K(FQW7~
8:A
5p)Gl IU$q 9:Ct)lw9bO Nb
10:E+|bK/^U(}
11:C
,I Z*C cyP*a3V%Q 12:E
M%SAt m%e}:i 13:BC
Q C C*ng vO 14:C
(K,uK it${#f;? 15:事务Q2inWM_

v ~q | c(`/D*_ a0K'U qS*_%u8P/AxJ
*dY'_,} fOH
答案详解
4T*XV j)Pt1M
}O9y z5h1t 1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
C'G6l#`o Ee2fW
8Y? K8J#^6t-|%OfJ3S ``7u 2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。S|DWZ\&r]
N}.B*J!w G6e Y8T
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。:{+H6b,sb? cO

+~!ut$E/yj 4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。4p*od9y*g%_|

])[7i r4{-J 5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
djF!s t
'U*[ z'Sm-O 6.答案显然是INSERT。
4@~J7Q%B+O +t4[btb.Yb9n"Q D
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
%H)o e7m6l(WD
szYRS1h 8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。7rieY5CSlE F?
1e][pN `9lX
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
A+]?K5d |5Pt
$Q:r V5I`:a2C ] 10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。%T`.g.W]!^R T.T
J.eDugN
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
4g$}8I Y,T!`Ac I-t^~Z ]
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。/t.W8Vy\;UR
]"@!XaK
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
)z{kM2D&I/d_
!`!v}qE$} 14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。#itM myO j4@&C
+y!NS6a \)`6i2y
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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