捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。(E3V^b.uQ-G1hvr
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
b6bw"y'H!h6TA} 本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。(R-z(I"XS
e[(_yjnkBk/sb Z
4r-[&U$QX-j-j
问题L2b5[6k{
;M'Zi9y;|9Af`y
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)Z"C6[$iH[/TQl
X4PJ%t;Epo;VW
SELECT * FROM MY_TABLE
x_qgK pJO ^
W9O5?M-{h*i A.如果可能,用把查询转换成存储例程 e*I7~U?4v P r X
B.如果程序允许,给查询指定返回记录的范围&H*fvW U/x*ndm
C.如果可能,添加where条件 E$s4k9H:i"JQ
D.如果DBMS允许,把查询转换成视图s:gY r&JPp,U
E.如果DBMS允许,使用事先准备好的语句0u u]fm m} j/q

ec1C,h B^-E
B"y$gZ:f2l#t+t 2.可以用添加______条件的方式对查询返回的数据集进行过滤?6~)g0t"x k8`3[1b

;w&AX-jM4e6t 答案:____________ sZ)N:_a6j3DBz
$n1rK7[{Vx`

fZ `Bc L 3.内关联(inner join)是用来做什么的?NDp g,z
N1yKQ9LCM,k
A.把两个表通过相同字段关联入一张持久的表中
\TNe._ B.创建基于两个表中相同相同行的结果集%ci[] Z.u
C.创建基于一个表中的记录的数据集
Bam_%F%?m D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
-z9{$PT2Wsq} E.以上都不对9sNMq!hD

!QaH"yA[9R{
)i`%@1uq,P C 4.以下哪个DBMS没有PHP扩展库?6c"P2c qpc*Y;U
#N!v%hf/_Ug;R H
A.MySQL
_~ p Kx:o@4R2Y B.IBM DB/2#RBA+_y:i
C.PostgreSQL
4@t{8jK D.Microsoft SQL Server
;I6o;O5fK K8[ E.以上都不对iR_/V2B m
;B|B8jmdER
x?M1@ w]q2z
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
"M;l&\,mn6b R/\| }
A-w;m1g PT R1Q <?php+SE/U#Wg `,r
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
8G[$H'n[.A` ?>'td B0`KfJs*[b
{wzqP k4Ah2R
A.MYTABLE表中的记录超过1条
8_M~a4e z\ O&g B.用户输入的数据需要经过适当的转义和过滤
P!k.o7c XBI,n\ C.调用该函数将产生一个包含了其他记录条数的记录 ^-I8b&b _'jE4^*\
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除R`|)K/o$o)p-t l
E.查询语句中应该包含数据库名,X@+GDm8o9F
4`6o2g:G\\4I$x-B~

e8\HC"{.q:xE 6.______语句能用来向已存在的表中添加新的记录。 {.|3NR4[?CjYO

x/f/P!rd.}.k(kT 答案:____________
K1S(`H3o,R~ meUP]

^ |3O#U#w:Z5J 7.以下哪个说法正确?
H9dGwd/Ouv6~.}
*Rj%yr Be&w!Y0a{z A.使用索引能加快插入数据的速度1i(y j/~T2~c
B.良好的索引策略有助于防止跨站攻击V9O]MK\5q
C.应当根据数据库的实际应用按理设计索引
-yJ E)C2b D.删除一条记录将导致整个表的索引被破坏6{!N6D-ik6G4y
E.只有数字记录行需要索引
0s(G/a{V4y
Ao3\*P0e,}nC
9R-Y9p4V-DF3XM$LHS 8.join能否被嵌套?
0JjSF0rg A@ lm5_+U1m ?En*TD7v(L$A~ {0S
A.能
(X!X&r:` f-?&YS B.不能
Q1F5V&a~{KR D$r%cG#cb'?wS-cm

W w(v,y1zYr 9.考虑如下数据表和查询。如何添加索引能提高查询速度?
0J,T qI N5];|
or8x[-L:T.t k CREATE TABLE MYTABLE (^ x$M+N:y
ID INT,
/f2k^|(o;ei1y$l NAME VARCHAR (100),
` Lv oED2x0}q&iD ADDRESS1 VARCHAR (100),(?[M Z l-U^~ k ]
ADDRESS2 VARCHAR (100),
j#vo A h.J Om ZIPCODE VARCHAR (10),
'}?D qOWcL CITY VARCHAR (50),t7n!rU.~7hhW
PROVINCE VARCHAR (2),`#mq%Kv,de)PL"R
)
Ek:Q TH{erV SELECT ID, VARCHAR
p#QYq9h._M FROM MYTABLE_.M#L!Q0\Z-gK%hzR(O!x
WHERE ID BETWEEN 0 AND 100
-tWE ?G:K$`Fd ORDER BY NAME, ZIPCODE
E:|SO#R.L q %V }M,L/MES0l1X4C
A.给ID添加索引
oGe&LN B.给NAME和ADDRESS1添加索引] P.@A/B?(_
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
$S:i qe[0}6OG;_b D.给ZIPCODE和NAME添加索引
C;hI-z4R7j3b E.给ZIPCODE添加全文检索
~ kk w9X5} a,J*g&R%Sro1w Wn

0{!ft3J&r b^S B 10.执行以下SQL语句后将发生什么?"gD2QJ@)O,I [

3C*i/wu]8PdD-A BEGIN TRANSACTION
aljatUg.Zv:| ~d cb DELETE FROM MYTABLE WHERE ID=1
'z0kS!Z9u#y L:[ DELETE FROM OTHERTABLE
4Io'E.e:YS6a:_%nY ROLLBACK TRANSACTION
/NTd3B w#W8u.e
/x'gQ&n*m8JjVK A.OTHERTABLE中的内容将被删除I Su OLf1E
B.OTHERTABLE和MYTABLE中的内容都会被删除
~1C&CuDKp2O Z C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除 J/O"Ik@w)k.p
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化9M&L2^q4AM.z,D
E.数据库没用变化q&m(fMB
*H$F'AM-?9B

\&Ygu/P]:GM 11.DESC在这个查询中起什么作用?*q{+qA3LD:H xij
J2R3i cH
SELECT *f^,~"{.^[ n V*K
FROM MY_TABLE
3b"a5N9`6{!LB j WHERE ID > 0;m6QMP4Gc/[;l o
ORDER BY ID, NAME DESC*cV,bP%rK5B*K
;l;Z[3V'_!E e)B5T6X1W
A.返回的数据集倒序排列
9p\/XTS+WNF.J B.ID相同的记录按NAME升序排列;BA8Z Es
C.ID相同的记录按NAME倒序排列
'U!}-T:Y3ojd J v M_ D.返回的记录先按NAME排序,再安ID排序.EEBq(F:v U?/y
E.结果集中包含对NAME字段的描述
Rc:s`I Z7w7v2C Fjp Y g

!P+_)DP7cm7w/uM 12.以下哪个不是SQL函数?
'c m9N$GvW bx
,K'QQ}?N(E A.AVG
o`]#j-Fc B.SUM
L9E9z~t`#Y C.MIN:bC-jz8p(^
D.MAX
#o_4s)PY6bR E.CURRENT_DATE()'^,U J6p2Pr

&HF/t*KQ$y dNi a F4i}v3~w&T
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
t?T4L+dVQ b1o-l s,?oj
A.该字段必须有索引
Q$IgNl!P B.该字段必须包括在GROUP BY条件中
4yz-fH^b!zm7\-q2Z uz C.该字段必须包含一个累积值
LjH;Y#T \9] | D.该字段必须是主键#`q:KV?j
E.该字段必须不能包含NULL值
/q$sVax'K [\j @1]
Wv VZp}rVs 1`+W3s8u:LZd
14.以下查询输出什么?2g@tbz(}

j$`]`z [-\7aytk SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE26]8Y7XU8l.G? U
ON TABLE1.ID <> TABLE2.ID4YUT6QCa Qw u q

Q8btq%t Q i A.TABLE1和TABLE2不相同的记录,WMb p3eohN:KI;D
B.两个表中相同的记录
?a/nX(pP1z C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数Mm*a*Jn-F3q
D.两表中不同记录的条数 _4g(V;oK1c`-K
E.数字2J\5pe2D5m

&`^+LkmAw 1}AZz8M*v
15.______能保证一组SQL语句不受干扰的运行?,y(g~Y?fr7Q
0k$[B `Q(T p+C}
答案:____________
"Bw.Yl } ]f y)eB8D4h$tQ6q{

,U0K)LL?blr @A
w%rYFe,R%J 答案速查e$`4z/U%~{
1:BC
E"G:`\!Z/{7z 2:WHERE
mNeH/Z?*A/J!b9Q 3:B:b(iBnM8?{.o
4:E+O$Z1m^a$R
5:BD]U C ]lX:J:P u
6:INSERT!{PC,`0}K
7:CJ f OE0V|
8:A
_#j5d(_ U}#P 9:CTb]zt2{U
10:E*`J8C AL;Tj9I|r
11:C0SD"J,M,B!t
12:E
Jq2R(kptq ]z 13:BC}5?:H:^]9CL$L
14:C
v2Xh0D0R4SO 15:事务.^ Sw s ei/U/Y:M}
7m`1cF4@ kCMOx0t
S(uh6Ar9NEYn

o!{]$leh2A[ 答案详解
h7kA8~-d _4m
`QV{8}T 1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。ZL9zw7j]x&C
Ci ^ES5X2ciR'w
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
]%W^8sUIX,e*c
ky/M"|P;\Iv 3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。kU0LCz3dr&g

p2KAp.` 4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
].W|mFFpB7q &N;F}4I+F-o@c
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
\^2u![.HtV,n #MS%_G @j"S?S Tw b
6.答案显然是INSERT。
(foN#B$P ["H w*S ~Z&oMC
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。5L(w!^3d4p5pT6|$r-H
#c5bp&uUx[!Y+M
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。j6}BuL
)G#mZUs4q
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
,~v:RLrt/j G
'r(|CP:l M~g 10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。X+s-g D6d dgK1E
G bwcT(U;@i"me
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。-[iuk1U Q0k kcQ3hC
C3d L$U7o}N;_1e&H8V3I
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
~b8J&O&eFbE/A2HCB
JMV f,U3B 13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。PuH"~ ^m/H'Eh

p2J2Q2gb4Ob 14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
-TO IY,h6l;}6h:v 2p tQ"uKV
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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