捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
;s7gN8l }~?Dj x PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。v%l#w"p],b ]Ek-Gb
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
HFEq](_*Bnj ;Xr|? a,p Qwr Y)u2@9U

a~9Iu U 问题5u[)no4Z~9l
'@7nUop} o
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
k1H\[V8p%wq.D
L] x l2ENS7N SELECT * FROM MY_TABLE Qu(S v R,H,JDM+^
;l _oY6h5` H4syO
A.如果可能,用把查询转换成存储例程
VR(Fr Lt,R@KV7mqC B.如果程序允许,给查询指定返回记录的范围2q c7H$Rzt3b
C.如果可能,添加where条件
ze/t.H F3w:o | D.如果DBMS允许,把查询转换成视图
hH*nv/~z E.如果DBMS允许,使用事先准备好的语句Hfs3M?.Pm-u_vg

fk?Qx;y n
M5u+cu;Cc 2.可以用添加______条件的方式对查询返回的数据集进行过滤?
(Ol2e| \_&fr
YO r!l.b.W#k3h[2Z 答案:____________x%b)dA _
y3Zj vI |5t
Q$L!^*M-{%?(p.H"ir
3.内关联(inner join)是用来做什么的?
3@/S"_ qQ
h"`'t a-c A.把两个表通过相同字段关联入一张持久的表中 W4s:w,\\-j4AN
B.创建基于两个表中相同相同行的结果集
Fv{Oi:` ur C.创建基于一个表中的记录的数据集 F(},N4FgyOQ|
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
s4t:o$C{2krnQ%U E.以上都不对
|m8BZ_|4xG#U K Z#oE WhL

ynKz7t/v$x*w 4.以下哪个DBMS没有PHP扩展库?Q)Y%~ J'I5B"f(l.q

f(O^%x`?-B A.MySQLr5~ec3p0k{)T+]
B.IBM DB/2
i1r1X)oU\5| C.PostgreSQLX.hm td| I
D.Microsoft SQL Server
~6TG|dP A5]@ E.以上都不对
en-I)@~U
A6kHk%x v.U8M 1isw$?!X#?6I9^+\
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选) l3nT[A u(\
AcGd1UWkB
<?php`1G){7v/\?(X"qq
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
G&S7Xuz!A ?>
-xqc6Ssn
d@.N1NE A.MYTABLE表中的记录超过1条
d$j}8[ Z"`U bC+T8E,F*^ B.用户输入的数据需要经过适当的转义和过滤vxT!sU[7TA,hI
C.调用该函数将产生一个包含了其他记录条数的记录
{9J-[;d;y5V])o D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除&}ERZ9|%w7L
E.查询语句中应该包含数据库名0n2O+HRB1}

c b2RC D L Jr +z3o~(FsG5j E-Q
6.______语句能用来向已存在的表中添加新的记录。S/A-^0L+NE c5f

$y]#r k P;ZN 答案:____________
p3J'q.p-F[7gh5d(iQ
ZM8|P*LX.x '\8O"Xr i(E8c J
7.以下哪个说法正确?MmRQ.Y?%n;h
z(y(Vk3c&f"C&qx)[ j
A.使用索引能加快插入数据的速度
B#w ~vj z B.良好的索引策略有助于防止跨站攻击
b*U3z,q&F ? i|uu[ C.应当根据数据库的实际应用按理设计索引
D)P-X~8\r D.删除一条记录将导致整个表的索引被破坏
A |4e+`'wN/D9L E.只有数字记录行需要索引F;~ f:T%b6z
$j4o8X7~"[3Hu
;f]Q;y#P~l
8.join能否被嵌套?;dSe;T&E'q d

)ty@}(y5`8m3w A.能6y2d;zhh6{ IY
B.不能
+z?2r$u8I1x+G
.nr R+?%K6u6U
!Fpk$Iw ~ 9.考虑如下数据表和查询。如何添加索引能提高查询速度?
&u[rC0m g5H'_ UdRB!a
CREATE TABLE MYTABLE ( m9m2m b@6U
ID INT,
|tDoh.S j)Nk NAME VARCHAR (100),
Mq+^ jQ ADDRESS1 VARCHAR (100),
_Fe/j3r[#b0o ADDRESS2 VARCHAR (100),o By U*O6Y F
ZIPCODE VARCHAR (10),
t9f2yaL CITY VARCHAR (50),'ik }Z'H2_
PROVINCE VARCHAR (2)Z1\6[o)sJs,PO
)$di-@6vJm\
SELECT ID, VARCHAR
mv@[;y%O FROM MYTABLE GSp5N"HL6yp
WHERE ID BETWEEN 0 AND 100cb'aRCSv
ORDER BY NAME, ZIPCODE
.Q3A(ze e8TGj
Y%n-O&|!h&e[ A.给ID添加索引mQ"D*AZ:~
B.给NAME和ADDRESS1添加索引
\@i Dc,~ C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
&h2y^/LwHJ g D.给ZIPCODE和NAME添加索引
4s9q%J,[+w1^ E.给ZIPCODE添加全文检索_|Z]5H(A%_$A-M!k

P m.rnea-TW (lm(S#X4gMK
10.执行以下SQL语句后将发生什么?9DD6nyS

!pU Pmkm;` BEGIN TRANSACTION1p(`!z$o!rf
DELETE FROM MYTABLE WHERE ID=1cbV ^.C2W-w aC \
DELETE FROM OTHERTABLE9N;aeI9i3T:i4Z
ROLLBACK TRANSACTIONIyLR}1[3R

`MG_(U _G8KKZ A.OTHERTABLE中的内容将被删除
W?"E7fb'[E @-c B.OTHERTABLE和MYTABLE中的内容都会被删除 wR7Fh1Uh
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除}+{AM\ t^8u+CC;k
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化p#_6UMe&J
E.数据库没用变化
h*D6m8`'P/bC,^ IFuZ'os)f
_:\*t'bY-G
11.DESC在这个查询中起什么作用? EAc3b4xDQ
1PZ8o7K8J/h3W
SELECT *
lfb'\wK"H Lf FROM MY_TABLEc9~4~^] zj
WHERE ID > 0
]bLKs6^ k&`%N4x ORDER BY ID, NAME DESC H8L%[T"j"E]nY

)d5W ag]NR4iDf A.返回的数据集倒序排列;x%x K#[C
B.ID相同的记录按NAME升序排列
1mMk)Y cH7u C.ID相同的记录按NAME倒序排列(o&](^ M1W$O^D
D.返回的记录先按NAME排序,再安ID排序+d0E'M0L!g.^$vvW8L
E.结果集中包含对NAME字段的描述
_ J&v6Gv
~g$A6\N#v$? i'NJ)W
5X:`L~W 12.以下哪个不是SQL函数?
%hI,q|G RQbio9J
A.AVGt_/cHL
B.SUMJv7G,wN
C.MIN
1D E)_+T` D.MAX
K%eIA,f[Eu*kn E.CURRENT_DATE()
4V"LX[i#Gtu F0~m7A5dT H

t0Dr#M3q%_ 13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
i#zRUP6O (is1U&G:gC8f0g+X9gE
A.该字段必须有索引5|_"F3g L.z&@A"?
B.该字段必须包括在GROUP BY条件中U sG]3W:u
C.该字段必须包含一个累积值,Bmut!^2V}
D.该字段必须是主键 b B5HwZZ-h
E.该字段必须不能包含NULL值
s:G/Rno8w P V8[nx+^A1a
v:S'Eh,Q
14.以下查询输出什么?k^"a y9X wh
c$\I e+H C k5fv
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
Q@"j6}/q\qH ON TABLE1.ID <> TABLE2.ID
_3}SGh8M @
i9bW4\#c+R'E A.TABLE1和TABLE2不相同的记录 {Xr wvg2K[
B.两个表中相同的记录/S-wtEQs-aLN&J
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数]"rU7r].bg4u/z
D.两表中不同记录的条数1m+x!a$^:H!a6[-M$h
E.数字2SFpjJq#^w

4d~ uL%_J
hR0h-m7SC 15.______能保证一组SQL语句不受干扰的运行?t0U,z,[0k

"M^3vX.uA 答案:____________
%v/~ V4W-qP4x~
Zm6d4M}(d[0] (b,Jj^Z3]z9I

5gp!p |(u-s 答案速查
"l&F/Nqk 1:BC
k {^7g![3Z*h 2:WHERE1d7O*H.` G#Pd
3:B
5i!rb4w]x3Xn*gXN 4:E
3P!hF8pJqv 5:BD
"L:B4Xs)_ 6:INSERT
@N-Acd(inS 7:CoXra}#Ub
8:A
!E)L&hCy2TB:a 9:Cw%L/}6ZMPvic
10:EKGh'`mS!J!poD
11:C:@rz%tn8ov7|$Dd#W
12:E
8KM H!} U)vs6w4hM 13:BC-m"RITyX)sQ
14:CG0c8J\"k?W2r
15:事务
v9tnoy$Q
,Q F0M\1O$z
v$E:P/X4K5wOPw;z
l"^uR&f(L4]5U 答案详解aN;h;y2py
\(?)E;K5E_9mQ ?m(l
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
)CSaS"DN7j}e
n|[["c 2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。~ e a+k v7k2O
3dP c2Q?0w3Fvd,J
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
:`w^&u2L en1I,_I{ W6C R
x_9\s)[d 4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
9T+Of$b f&d;X
`7wT(W.f9|8iw 5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。 rq*Y9O'~H#Va

0].q(Hw1jx 6.答案显然是INSERT。 ]MM6LNs.MZo-M

q&R |JO Y K4TE3XC 7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
E/~)R%sa4G,Ee:o @*T 6T P2K {-cF'b
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
1c ~l bAC~ &s\ T!d _sTGT
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。Cz9}7em^g1_-v

Pw]*s!\@^,O 10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。g#@'n$HpHGs

t rN$Bh6h eg'O6c 11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。*iw M4j$L[3p4h6\
1SB^Gp]
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
cF(vZt Kaj6g)Y^6]kM(k
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
4B2Z\Vvu5vc |
N/Nn;B0v-G%` 14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。 Gyu'Qa K"nF't

j.}i)T u(Y y*_(`)F 15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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