捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。*{r"t'a.Ra1R3M#gju
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。%s6k4hV^9_#Y
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。.O!n4L _tiB,V
E;V+hc8Ku

*]ev-l:mp'[ T5P@ 问题
@%X2`K0B V}Tp J&H I/ZoF m ]\
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
A"_8P0e Tba'v
[E1uF[NA] SELECT * FROM MY_TABLE
~.j e:JR4@ *x;@ ~ SY hN
A.如果可能,用把查询转换成存储例程Aekr.b.``E/S
B.如果程序允许,给查询指定返回记录的范围 ^_ZRj1Zh X
C.如果可能,添加where条件
'`R2QU ]\h D.如果DBMS允许,把查询转换成视图
^8_1m#Mw-f}2T%g ^H E.如果DBMS允许,使用事先准备好的语句
+NG ]"L;N2]LX&}
u R H\ Tg GJ*N#EUM]
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
w^@5^5H1bc
g` G\AWMZO 答案:____________H/Xb dn2J `
)Q/C n:khFP4J
(A:hE(o.?/dS?$o
3.内关联(inner join)是用来做什么的?V){m sx0B
/{k2c$U t#@L F!U
A.把两个表通过相同字段关联入一张持久的表中
Hl.LYi"x D B.创建基于两个表中相同相同行的结果集 sYlQ{ B9@
C.创建基于一个表中的记录的数据集!Xw:I6uW;}\ x.p!W
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
^x#s _?3x E.以上都不对B ThZv,K
'|%ghB6o:i

Ud~ Z1HF 4.以下哪个DBMS没有PHP扩展库?/mr:?UGX4W

gcfT c ] A.MySQL^F ]Y3F
B.IBM DB/2?7r8z4N'r#V%X$i mu
C.PostgreSQLIx!w;E@
D.Microsoft SQL Server ` E~h7B k'T/r
E.以上都不对
2F'UOo3JQ'd
@VG|:} Vhw
_9q)N B[5J.L.N 5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
!NB^@ n+G0v1K3b q A%Hyi)f0`
<?phpm Rb Z%E;])_(eoH v
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);2n%S$B/a1?#Y x
?>
`coD EU.M XWkH9o6dI
A.MYTABLE表中的记录超过1条z m L1VHI
B.用户输入的数据需要经过适当的转义和过滤
mxfJ \TcP C.调用该函数将产生一个包含了其他记录条数的记录4Sy!Y1eX+HW
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除e i.Q(N6H?Gd2qr
E.查询语句中应该包含数据库名
q,g'K!D%V M
8^.JB.~DNZ {a"a-h\7h
6.______语句能用来向已存在的表中添加新的记录。,? va.Xr!?i-G7W
~,lu;XQ4I
答案:____________{6@ a4[%i!S-Z
*M!ak.\ _ |9lo0E
"d``m"h.sW
7.以下哪个说法正确?
;_CO5c.u%OCN'Y,u
{#P(JYM4s A.使用索引能加快插入数据的速度
5]l.BB1pIF~SL"~ B.良好的索引策略有助于防止跨站攻击5fz0N~$@n&kW q ^X5y
C.应当根据数据库的实际应用按理设计索引
k/J,i"oDE:[5q D.删除一条记录将导致整个表的索引被破坏/L c-z'G)J S(O
E.只有数字记录行需要索引1N%G5G?:V
+j ~c-B8g&r
L.~0shkc
8.join能否被嵌套?
0YU/Gf&?} I\-q
:j7S/j G^#p4F$s.x A.能,_0dHsSv8z"|
B.不能
a$uFkc S;tn4@
5u#MkQ'|I
mb9DS#tLBIH3V'I 9.考虑如下数据表和查询。如何添加索引能提高查询速度?+Je9PP(GLqR
|7YJc(ccT Bm'A7~
CREATE TABLE MYTABLE (
Ie/MFE ID INT,u qLkWSXJwF
NAME VARCHAR (100),%O.n{2n3ErgI
ADDRESS1 VARCHAR (100),
O IoA:h&zW*Bn3jE ADDRESS2 VARCHAR (100),$^'j&gD1_
ZIPCODE VARCHAR (10),L%G$h%L]GR J
CITY VARCHAR (50),
EPNI nBb B)B PROVINCE VARCHAR (2)fd&}!? P;U)g2I]IW
)
6BOQ+Fr |ZR SELECT ID, VARCHAR4e%p:s B P-s}|H
FROM MYTABLEE"^ sl yba
WHERE ID BETWEEN 0 AND 100 B"X1WX&D
ORDER BY NAME, ZIPCODEV@a4v&g+JR{:C

t.w"v:t d A.给ID添加索引
Y9Tdn&| l1g B.给NAME和ADDRESS1添加索引3u7N:dk;pb x
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引@pvh:^b/l6c
D.给ZIPCODE和NAME添加索引4OYY,cv\2c
E.给ZIPCODE添加全文检索 qK BIa:L{

h{:o$H9XnX #iS]~Z/v9i)@
10.执行以下SQL语句后将发生什么?
+B(cL\Hx4s"Z
Wdy4DuII BEGIN TRANSACTION
W!W9@wJ+BW DELETE FROM MYTABLE WHERE ID=1ZP-C6P&`'o hgC E
DELETE FROM OTHERTABLEQ.nxRg#} u M{JA
ROLLBACK TRANSACTION
-VXh&u;?&Mn? k)u
^'AK+C ZLq,F V2n A.OTHERTABLE中的内容将被删除)dU2y3jc)s.vPGr
B.OTHERTABLE和MYTABLE中的内容都会被删除
,aT U B.~Z C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除'i nI laC G!C
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
2x;I"b'}#oGCc E.数据库没用变化CdZoDv4h4aSsPL

}0\#ka0}%p2U!T
G wv*lF*xx8Tl R*? 11.DESC在这个查询中起什么作用?
B8jR3? J(}`0Lt ${kD;UmM|3W
SELECT *8qN[m7N+@B
FROM MY_TABLE;?0YHI&T+nuc
WHERE ID > 0
u*x q$pE%c ORDER BY ID, NAME DESC5|[9L _Fy Bl

_/T2j d0k8p A.返回的数据集倒序排列
G6w3M)Gi!YWV B.ID相同的记录按NAME升序排列
.s/_[ b6|gY C.ID相同的记录按NAME倒序排列
d$t9ul{Mv D.返回的记录先按NAME排序,再安ID排序8H-tfd-@?!C {
E.结果集中包含对NAME字段的描述']XJ#MP7n^

RG^ Wd5E1P)Y'xP4? &b\B%}'Q0K
12.以下哪个不是SQL函数?wL#Ti;d9AX
!q q2WC1C
A.AVG3y(oH9rg
B.SUM
cF w^b O-l C.MIN
J[8E)i,S D.MAX
L1|8J.Dv;Hz E.CURRENT_DATE() S C0R#P l7F{2Z'G+t|

&k`Q4jo\n;r` 4KB!t%EY
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?S!T }*U.Tz

4C8H&ia-h R A.该字段必须有索引
0}*k2{Bg|z*b B.该字段必须包括在GROUP BY条件中o8}Vh5gC)a$f
C.该字段必须包含一个累积值
kpU?'G ?9O D.该字段必须是主键t|'ai#@z
E.该字段必须不能包含NULL值
%Eb&O(Z~+|t't C G D0L5h5K
+cmN6xay H
14.以下查询输出什么?
/Lx5ZS(Y q
+f? SzJ^ SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2(o,G7HJ:mhaT
ON TABLE1.ID <> TABLE2.ID
J.d7T!Y r,YG)I
Y \ D ];Zt6g A.TABLE1和TABLE2不相同的记录+G6yLVhu)mF F
B.两个表中相同的记录
N1^q'MqH C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
1QmDL6?)b D.两表中不同记录的条数 pCd.X^B
E.数字2 {T$BhNXu
D,Sxzg'R }V

r6?/v'z4X)j!`A 15.______能保证一组SQL语句不受干扰的运行?)T+u%n ?7rw#?G

w7B~ ly Ul 答案:____________Qrx"n#N9D q

r$A*|4oj uL1FQ
~c \vJ g%g(t sXH
答案速查
'P(W*g(e(PLh 1:BCrQ sR s5z
2:WHERE
|:X!R[p5u/eJ 3:B
/S ~] x l 4:E
t RP0h_kd,@ 5:BD(Z P I@mr
6:INSERT4Px+c#Sj}'Ju
7:CL+A;Mj:Wd8e~{
8:A
.c@ r%\@q 9:C
nB1Np] 10:E
-w*J_P`k 11:Cm'{4APd|
12:EB/R)v:ny A
13:BC
;H^]4]3t_)ry|7e?t(_ 14:C#x]'j/c1}*@,l
15:事务3t'F lLW0UV

;\V5~:B}"} o8X
6\V7?N+[h!q%o
_@B'^l!a3C S 答案详解
#Wq+z8J:^~4bd
/Ee2HE zA^VD#V(A 1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
b}M!S aN M$pAMK+k`N
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。r7O0t(P'cM%e

D:q @(D"PV 3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。-R(x$G.j [g:a

6pue/FY$n3l[+} 4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。 pE,[*k|eP9@
1zA6_#N ?g7T
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
;K7U~@ e;E@s['j.d E sn5X\:r%z*C7I
6.答案显然是INSERT。&g B"Z ua\/M
$v;f7y$Rh
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
z]h z{ r L| o 3y F%{7iR,[BfA
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。,I-y_"v5ZZ%h2fd
e6ua i,_5}pZbt
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
Y\ h3|O3U{ (eR0e/nU$kg,dk$e
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
0qrn lBID)r0Y9` fc,PXldD
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。:mC} Y5bfW}
v8S5vv&rMdfl1k{#{N
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。a x*{T;?;HN
^)i&t }5VuT:U ]^
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
&?NG1HC)?.S^$Ey 4s4n$t9G pF-`q{
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。I h:oT!V S

_+]/_2L Kv!J 15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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