捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。\5XCJuX\
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
lN,d U I8Tt(x 本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
UuG,^@xxZ G5n&^ Xt8Prk8WA#A OP1Mt

f3j}#o k g 问题
mxX"WGp,tu Q2I}-oI%w*r
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)\#@^Ij4e#m;o/[-R
g} }T$Z~
SELECT * FROM MY_TABLE
x+m?7Q@,lZ$z"t0q lk%n'Dq:gQ+@n
A.如果可能,用把查询转换成存储例程0S3u9l \k#F-i^
B.如果程序允许,给查询指定返回记录的范围
@7ZP'C X CR)C C.如果可能,添加where条件~2O+_h)~P8H n"L1A
D.如果DBMS允许,把查询转换成视图"y6v^lU*vcO4A
E.如果DBMS允许,使用事先准备好的语句'u0a6IVUW

Z0Wgj0m{t$R.C9St W
9a3Nn'h E6Y!i-Wnmd 2.可以用添加______条件的方式对查询返回的数据集进行过滤?
8~,SuO7CRY!Av
*oy'KhK 答案:____________2LcH x/{b"ns
A _1i1F'q iQx V

zD9i$HG!e*H 3.内关联(inner join)是用来做什么的?4oEt2y&z*k:NI n x,O
a7aY \8t:ybe
A.把两个表通过相同字段关联入一张持久的表中
%We;b kmg B.创建基于两个表中相同相同行的结果集$?w'n yF(e~2X
C.创建基于一个表中的记录的数据集
7g;{[nE D.创建一个包含两个表中相同记录和一个表中全部记录的结果集 Ikg"Zv(f[0jT
E.以上都不对
O/Y7F5H1RJ:? }g,~kz5oXsk

(y R3ch ~h#Z;]w 4.以下哪个DBMS没有PHP扩展库?
5i'n,e+R@5` c|^B
q/SW"`'nEO \ A.MySQL
5I6z XB \%y,R*tMQE B.IBM DB/2K6Co V W]Eo}4Q7P
C.PostgreSQLi u?!~lVo|m
D.Microsoft SQL Server
Z&~(Hc C*l3I%Vca J E.以上都不对2s)|5f s#^
RJ3W5qVl4D A D S
r"S|&e upc
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
P6e/Z'Ok
5L6D&r1K1\D/gn&j <?php
(lv:A Kz;{:?S $r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
D'o\&x-sy+w ?>'D ji?&b jP9dj

Wc1z$qX+b+@.x$@ DP A.MYTABLE表中的记录超过1条
[%\\m#D;[ B.用户输入的数据需要经过适当的转义和过滤
.I4F'sp@ G cj"N C.调用该函数将产生一个包含了其他记录条数的记录
q.~dxVhp%];Y8H D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
o7^E2Wuf3} E.查询语句中应该包含数据库名 i:nnfz,V;H!S
#Im8y|k
L qk/r!X ?
6.______语句能用来向已存在的表中添加新的记录。.Y&gTB-Kc^$A
Q^b6P_-u8ov*y
答案:____________.R]4PXs
M:K9mpv;W,M&tZ?3Z

WaZ'jB!^h_H 7.以下哪个说法正确?M Y[ y1z$G[
&W7Zq*X0Uk
A.使用索引能加快插入数据的速度
7J;~A-Zn$W;U B.良好的索引策略有助于防止跨站攻击,Og:CL,q(] P
C.应当根据数据库的实际应用按理设计索引 O5J8Q%}.D$u7v9e
D.删除一条记录将导致整个表的索引被破坏
6In2fdH#m E.只有数字记录行需要索引
gWG8~5RE
+zd.V!`-V [ FT n Q tEPtx
8.join能否被嵌套?
Kf5RQ0W"~
u;CN^QgY(w A.能"D.Q-K a{3hu
B.不能8M5_]B"}`Vw)w
c~*@%e7b:F1s+S

bwkR4eQI4t,b 9.考虑如下数据表和查询。如何添加索引能提高查询速度?
3}&V~ D|h
P$p-uN N CREATE TABLE MYTABLE (U8Ra FlycM
ID INT,#wz.tB"o
NAME VARCHAR (100),6qq;PSj&`2xd
ADDRESS1 VARCHAR (100),6ORB'|/j0z R)a
ADDRESS2 VARCHAR (100),
n*])aevuZ u*D ZIPCODE VARCHAR (10),U/p p7K,q"[`4j
CITY VARCHAR (50),
K#bI y/c{!KM PROVINCE VARCHAR (2)
^&i#A#{*_P-W )@1Ohkg5M$`
SELECT ID, VARCHARn:b4Gz7lTK
FROM MYTABLE
^;iD~[ F WHERE ID BETWEEN 0 AND 100Xe R AGR
ORDER BY NAME, ZIPCODE4f/Ub3AhQ

0G&[+~PRzF#r-} A.给ID添加索引
r\jt!? r(D B.给NAME和ADDRESS1添加索引)}&W'Ie)N"n7Xix
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
;Y(@Vg4p'r){ D.给ZIPCODE和NAME添加索引
/Y5xtV$nz'X3zC"F E.给ZIPCODE添加全文检索
} P,td$DyB l szk?+aD$fv

!BR+c uFy{0rq 10.执行以下SQL语句后将发生什么? rW}2?R;[}?
q6q"XP]Y
BEGIN TRANSACTION K"H'{:r1aI%P4c
DELETE FROM MYTABLE WHERE ID=1
!a7IiQ~{r DELETE FROM OTHERTABLE
(I)e4GUCcZ k&uN ROLLBACK TRANSACTION
i i?B.b`
&zp co @@^MB A.OTHERTABLE中的内容将被删除
@'cN'W*I)a~*x B.OTHERTABLE和MYTABLE中的内容都会被删除
k'W,SO4g@c&P&` C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除8aX |9s4si9W"W
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
^]NIO!ss/uWKK E.数据库没用变化 L5Y:B[O2x

6F8?6U w"B o f wa1P/T)|([p
11.DESC在这个查询中起什么作用?$d*w%ebw,k
:MG3z9Ax|D
SELECT *+gg:SP{6H#aj
FROM MY_TABLE6N TI\5@J
WHERE ID > 0
$F,[[/wrj/o$P ORDER BY ID, NAME DESC
6Q8x%_i;m
u+O$eb5u m8GdIb A.返回的数据集倒序排列
;kUv p6LD_ B.ID相同的记录按NAME升序排列E#e{d;~ _
C.ID相同的记录按NAME倒序排列5FVs^A4s$_gZ k
D.返回的记录先按NAME排序,再安ID排序
p#|'Re'C E.结果集中包含对NAME字段的描述
)i"L#c6F6|v3P "MHFx,a#C
uN+zQ/} eh(y
12.以下哪个不是SQL函数?/E.a'H8o,b X'i ~4RF

8M;l Fjt+Pb:yBx A.AVG
-|1Ep |Hf SD B.SUM
5h PB A1e_ C.MIN
ac-Sj |3MMO D.MAX
8W0Lc)\1d\Or E.CURRENT_DATE()'[C xH9_x[ k
5Ph&Q#ahY7_P

.WZ:eq.@ 13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
S_'f:o2j/eh(TZ0Q7t
zU5Yh*fc V.U3P] A.该字段必须有索引.{#dF.o%q$l*_p8Pt8\
B.该字段必须包括在GROUP BY条件中
^Y'VY;e)I*j6F,E.] C.该字段必须包含一个累积值 B h)g-? `
D.该字段必须是主键
#k{(t/Y9i] E.该字段必须不能包含NULL值)W6?}b(h$@

A%aM t~2J6K
X-rq,^Kj 14.以下查询输出什么?
:a0Ma,}d v4p$g
;vw!| Q2| SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
5]"rt6[ Tld@ ON TABLE1.ID <> TABLE2.ID3Q.h#`t'wQ

`?,^J/K2Y WE/q A.TABLE1和TABLE2不相同的记录/nY!J#j q5E'w$u
B.两个表中相同的记录 |l-C cL;B$wp
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
U6VFW+} D.两表中不同记录的条数
j6T3Fj.gd4y] E.数字2B+r%kd,o \m!W

#V Z2xdj#v9b0`8_ n&a:Ub D
15.______能保证一组SQL语句不受干扰的运行?4]_:y^7D!FIW
&pi&g(h{x'p0P
答案:____________9q%ojj%~u

d(OX5ry
L0}?G7a's$B-\
[6\Wd,lj 答案速查 x\mgUa5Z"g
1:BC
:HYKw9\&S1p_ 2:WHERE#z$^$r"E5s hf2J
3:B
#ou}sOm3V/e2Hf&B+{ 4:E
u@9G/z!iV 5:BD{6N,y1} TXI(k)A
6:INSERT+vDv;vvdMje;p
7:C V+Fd j&^h VO1A#d1Yp
8:A
Sc*} D4L 9:C?`a1h I ] ^/~/M4eP
10:E
zV$Sv6SW$pJ,` 11:C
:{ AG}r?R 12:Eq&C/g6o~0mb
13:BC*RS m$W._r8[}'p
14:CrPq/YpTG#^kM
15:事务(I/I2x)Z*p:|+c4z
&\vQ3_!c.jF!u `.~T

E(V`1A-x5{!T
E5s0n6ZS e 答案详解F[x]P:F

HXm8JQ9| 1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。j#IF[,]

6uZ+u,r5ePZ 2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
!\5ew\g
.?;y c\j9D8{ O4R$d 3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。b"tLK4j^ L9P)\
*|I&Uj4e` G I^7Z
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。f3NA K7TQ%\;r
+|u!?%R3S"g_F
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
N!MDy.f'@Z7B%h6P
/v4DpfC2Q7{]i 6.答案显然是INSERT。C)x NG"UceJ&`/q
T_Ef"M_XLb
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。3O$g/GP D9e5~

7abs%@?/n~lb 8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
O;iU3[7s3g A|x
/tK\ BVkbf 9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。z%L,q A)v {L
~X-Jq0]
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
#F yL;k"H~ u-q
}"CogU%B C 11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
"T,I?7Up#pP-ssz ~;c
s[ i2C9Zq-f 12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。$J0VBF#[%O0bvsF
2vE-}[*K$C.e)f
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。K SF]d&rU
3Q.qs6c [1U ["O'h8g"L
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。@+x.}1t#@1nD"v-Lf|

O(O!X no} 15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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