捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
jciL}.zq"f-Y Q PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
8Snd#ug+erY 本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。$zp2|_(Q/mE

'gZ&j.r"`S
%J*^,jt3o1R 问题CD-V1h5e%j*MS2g(J
1\0wq ] a
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)S]m*r @}I
(vp&U"cwKh
SELECT * FROM MY_TABLE
*tF:H1C,l9\NPt0R-@
)M*C_/O`!eI A.如果可能,用把查询转换成存储例程
'U0o&TJsJ B.如果程序允许,给查询指定返回记录的范围
no*JEv)S/s C.如果可能,添加where条件 eG.ys(]"W(gp\,K
D.如果DBMS允许,把查询转换成视图uKg'UK }2~#lTM
E.如果DBMS允许,使用事先准备好的语句D1`7R-EAE A&__

Gj:t|#Tj
wG)Y dE;KsA 2.可以用添加______条件的方式对查询返回的数据集进行过滤?8x(Es\N'Y0LZ
4L%K5rvw4|
答案:____________
\e8X2B]Cy0aTj lj
Ojkx!~Th(a
L3R$XL*S-z U$~ 3.内关联(inner join)是用来做什么的?
S"G'm'u Q#sf(k
@ Hb-I!j/V3C A.把两个表通过相同字段关联入一张持久的表中
!rJyLe-q B.创建基于两个表中相同相同行的结果集
5TO j bK&@q C.创建基于一个表中的记录的数据集
HG(K~9E\ D.创建一个包含两个表中相同记录和一个表中全部记录的结果集$\ Ci-AwGa
E.以上都不对L'Ykj Q1x
jU)A a0\ f5w(?4|)M

L4Q!^ okW4X 4.以下哪个DBMS没有PHP扩展库?8\:q a?x}
'pY7FFNe\R
A.MySQL
$Bz5n ?u'JA F B.IBM DB/2;X$~3n7{t7n
C.PostgreSQL"l ?'[ Yf'^
D.Microsoft SQL Serverx4HW5v}u:e3m5|l
E.以上都不对)?5bz'?:r8h@rv

rVI"?/j%q+N ]2as\ D E[ `\3q
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)/u:`)["CF glT
OtR7a-A?w
<?php.SpU+uq:i
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);&\T\0O ^Bx s:~t
?> c0U ~1h,y m|
.|uw3p0v-f K+DU.{]
A.MYTABLE表中的记录超过1条I#K yURt'l:?l']
B.用户输入的数据需要经过适当的转义和过滤E NN?O-W3KB{R q
C.调用该函数将产生一个包含了其他记录条数的记录/K~_,b)[rDH!mGo|
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
6B.~!pP"X5JN(Yn E.查询语句中应该包含数据库名}"mMf[;AK

w,JVzW Qu 3gM j'M@1b
6.______语句能用来向已存在的表中添加新的记录。
A id!G+R C D
@{x*|l2G 答案:____________
,_na*rb9d(A`Lg iv6y:Y6e {.^
}t$K+c@z.j
7.以下哪个说法正确?
3g8F QA+e ,G[h%r2z.B5O IkW!mZ
A.使用索引能加快插入数据的速度
&D*ck3S[Z1r)s nG B.良好的索引策略有助于防止跨站攻击
7LY/?/z ?2p[x C.应当根据数据库的实际应用按理设计索引O!qC _ w `$E$p
D.删除一条记录将导致整个表的索引被破坏 a#MG7W@`"Bk)d
E.只有数字记录行需要索引EpxJBVbz
FS7dk\F
? kI*LWz_#tci
8.join能否被嵌套?
!hL_)K(x/au| -h'R JN*ni#B
A.能
cDR)Hf$k B.不能 LT(K+o3G6k*a/D;kvX

1R{Wi%I D Fj7eq0}])G
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
i6M(X9b8C l)A
Z!G&p@?0h(ci CREATE TABLE MYTABLE (
jqL6yc_Bq a Y ID INT,
m1};u'Pa|S%s-ln s NAME VARCHAR (100),1Ev2T7^*SMl
ADDRESS1 VARCHAR (100),
T{E'z0W+P.^S-YE[ ADDRESS2 VARCHAR (100), }!@ CY$}ao
ZIPCODE VARCHAR (10),K}~bu-Mcl,d8JL
CITY VARCHAR (50),2Mu\*T%B)|$J-e
PROVINCE VARCHAR (2)
.o)|#tS2m `:} )~ YzJY:i
SELECT ID, VARCHAR
3~3w#Y ~'PZq&c FROM MYTABLE7LS}wcs
WHERE ID BETWEEN 0 AND 100
y"_%e;{\!}k'@\ ORDER BY NAME, ZIPCODEz c'^ze5w_5{E

_I9p f/@j A.给ID添加索引
i G(`i z,sjpz'E B.给NAME和ADDRESS1添加索引&QV E{+q0P-S8xo*x&eT
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
_Di;D:i;B D.给ZIPCODE和NAME添加索引}%NI8l6D1}T
E.给ZIPCODE添加全文检索
u$F.F+a R(J H2axF!d ^
[cG f;\ ~+i
10.执行以下SQL语句后将发生什么?
oV4h1VO0pV d0DwT4f'[Z
BEGIN TRANSACTIONOtJ8HZQ}
DELETE FROM MYTABLE WHERE ID=1
3i j?9q y DELETE FROM OTHERTABLE` })[*UY9[7NV
ROLLBACK TRANSACTION}4T6S3@?_ Z-^;g B
9Iz d"L;Oc_
A.OTHERTABLE中的内容将被删除&^8KXkuP&\q
B.OTHERTABLE和MYTABLE中的内容都会被删除 x6_"AD*Y
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
p7g+R5|'X/B D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
'@%l2b5XU0}cO E.数据库没用变化
$z4E"[ C:y^Jt9c Ej_#t/Z#b"p&Jq)s[:J

;OH-I&z$A)K ? 11.DESC在这个查询中起什么作用?
8ayO~ B0`:b\ 3y&jwzy w3K
SELECT * Z7A.mAi
FROM MY_TABLE
;t"cz U:j+z WHERE ID > 0
Oj|,E u7]o['lQ ORDER BY ID, NAME DESC
Kj6k Mp%D2w} 'y4L'sR4UI)p-K
A.返回的数据集倒序排列;Xzu };rJMQ
B.ID相同的记录按NAME升序排列
}7@W o?JIy:N C.ID相同的记录按NAME倒序排列} u+P MA/PQ8L
D.返回的记录先按NAME排序,再安ID排序hF4?*o_GSKd
E.结果集中包含对NAME字段的描述2M Z B7kb%x

7P(s*xvQu] $D k%QyS3sD
12.以下哪个不是SQL函数?
te}-uX a:yq[ 3M!]*i0ao I*Yy
A.AVG| aY[5f!N&F-b
B.SUM9e*k8e1ix#A W
C.MIN
Jc^O!h:U1eSa D.MAX
$wu lT^#w8p E.CURRENT_DATE()2X*un_)k:j#i
[ [u4UM5v5iM

'C fG/kF&U r 13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确? v$n6L%@2ZQ
f'yw@ M(v:e
A.该字段必须有索引)i/E4r*[3b eU
B.该字段必须包括在GROUP BY条件中
k3C/Qc%\u#| C.该字段必须包含一个累积值
:\g*K(yJ Z,P`a MyN D.该字段必须是主键
!p nYHAW@-MH E.该字段必须不能包含NULL值^7Ql*S1W/DD*wp#C
,yMP.Z ~:Z

U4q+R&?p(FZ 14.以下查询输出什么?
w?.T(r[ 4Ao$s{%r
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2g6q'Otl
ON TABLE1.ID <> TABLE2.ID
4Pi6M,Etp"m'XkU [Ix*W/}Wl
A.TABLE1和TABLE2不相同的记录2H%NY#b1V$}m
B.两个表中相同的记录*u @_k6l4X
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数P{9dHs{K7V:BYg
D.两表中不同记录的条数_]e_ s7}f4\G%wA
E.数字2
"o$Z#f8B6a@ MOv'O#Bp s

`hjU@*vK/v o 15.______能保证一组SQL语句不受干扰的运行? oYey `+n D Q

Z\:BSBL 答案:____________
9JS&B9Jl4E 8V+L@0n8H"`g
|9{ ?4[4|^

Bj!XP8r 答案速查}bGB0xB[s
1:BC C4t'oN:T
2:WHERE
K9|6a@ E _ 3:B
I@ J"Lx[ k_;O*N 4:EGx"K!QS U F
5:BD
n&@ ~ U'N rE0Tjl 6:INSERT
$R_s.l-K9nV 7:C"w8yFi$g6[ `9e,R
8:A
F1O] |w'o$y"Rj 9:C
!zwe0h6| Z 10:E
#nPOe`&i 11:C TiD9i'x:E
12:E
}1Q6O1de?7J^ 13:BC
5PC1u&k.MvSr 14:C,t5e)n/uO3Kn"I
15:事务&}o0vrnHx3\$Tp2y6D
2?NY$Bk5d$m.J
'd/aFG"{

!\d1V:PLd d 答案详解L'c.m/MBKF8Y
? M5L]rR^Ul
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。Zw9Y.RQ#p \O#F
GVz'iI|5T4H[]
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。p~B:P:i
]BT*\4x ~2w#x W2f
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
R U$N9Qd9\u-u'E nQx4Z.QW._Rry
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
XASH1Y&Ac
J i7T'u_my 5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。 \lVfD'H

"]#{^)Y { 6.答案显然是INSERT。%Up;PD6x } jH*^
1S5N[6F/z:l
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。H)kQQCk/Yc
6sWJ,V,|SO y4[
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
4_!H Y!RY)]^'i A9x2W8f2Sy Z
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。c!A~9v%}

6J9SWy;F%yD3d(H3O 10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
z&YSO7{ x I#WXY*`Y|Y_)^
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。+n mgpu&l
;X,D3g0l'b p9H
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。0tF1j:r)X u:B(K:H
*JA3Jo?#x7My
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
3e7E/@}0}5~W1g,P}
't"p+h&S2Qx8x9O-J 14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
lI hI${
L }a;t}4YuM 15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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