捌玖网络工作室's Archiver

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

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

如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
Z+IG:d:JUB2v)cL PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。;\+`*E W,Oh.r*W
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。V9\2Z*lFG%Q
$qI3p m}-d s#G|

Z/VH"yx [Y 问题t7^ U.a4eQl7MS
q"O'C"\'k ?C
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)G^8t \ v5zTl
2Y0z$T?$HCN {:J+a
SELECT * FROM MY_TABLE
z:n-wuyZ&d(Q 3^0XL Xj} }Wv{,V
A.如果可能,用把查询转换成存储例程
_Y{e!{q p B.如果程序允许,给查询指定返回记录的范围
8[p!NY%}QU/CbK C.如果可能,添加where条件
k;a5w bA D.如果DBMS允许,把查询转换成视图 s5t]4Sa
E.如果DBMS允许,使用事先准备好的语句Y ?5QY9u0Xui|7Y
Hej;v?I
:ZrDW[
2.可以用添加______条件的方式对查询返回的数据集进行过滤?+n'[.Iw'~.}qFJ x*R
8k]Q,J"P8F
答案:____________;~,N2c y+m ]qJqg

}CBwcdkm0k O#[Km%N
3.内关联(inner join)是用来做什么的?
r@)[gH 5p)cD5M d`/Q
A.把两个表通过相同字段关联入一张持久的表中
4tmw6nye"z+t B.创建基于两个表中相同相同行的结果集
7w9D-K+S;G(JR C.创建基于一个表中的记录的数据集
%d\HLr!u*hC4^ D.创建一个包含两个表中相同记录和一个表中全部记录的结果集)f$}sf[N
E.以上都不对6p6]aJ,JH7gUe
Wk]CV9d

+H'oN&a8|La9jW)N^ 4.以下哪个DBMS没有PHP扩展库?
TB6m-w9a\Z4w:}?O2f
N6T^e/I6| A.MySQL
:u'\)gN%_.xQ B.IBM DB/2.k4}*[dd8}z.C9r
C.PostgreSQL
[_q aA#V D.Microsoft SQL Servere8_ b Fq;o:rQ
E.以上都不对
B+\L7\)J5sW
lK'N3M#ByN,_
!i s8h'xj4e"A 5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)k3h3[:?)o+D.u#r
x)Pw3HZ
<?php
:Y3O+p{t-n/k\ I $r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
bgL3{l/XM&P ?>Y4g.rA0[$i d2S'g?H
b:dn ?3q^
A.MYTABLE表中的记录超过1条2|o)wB;`
B.用户输入的数据需要经过适当的转义和过滤
T*l5] yt'k)Z0Yf C.调用该函数将产生一个包含了其他记录条数的记录7a f!d/D"f*M0W
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除6?]uF6A;s
E.查询语句中应该包含数据库名\0j\&w0r4u
*v9\*\Er9s z1j[

x8w&H lR0I N[/u 6.______语句能用来向已存在的表中添加新的记录。
&GJr zUJ!RM G M #GN|o9E7J&xRx(M'Q
答案:____________6pVGA'MXQa3r
J#~Et K9?v
-L#a [-SK
7.以下哪个说法正确?,e\9Nn.G7o
'N#U0p3g$HY{ |[
A.使用索引能加快插入数据的速度5Of&iNw!@ tlN
B.良好的索引策略有助于防止跨站攻击^[@|+~CBQ
C.应当根据数据库的实际应用按理设计索引Q*tBU/Ub
D.删除一条记录将导致整个表的索引被破坏
U p@r&g)e E.只有数字记录行需要索引
,x;j'x}*T8Gc dI ]!W7ea

/f_]p9Z0Wb 8.join能否被嵌套?
6d*nYp%{RA:t'M
DK.c#E5T&j)@y A.能Ve3XA[s
B.不能0|*\gh[%@9F4e8q0X

6Z-c-to J(?#@9N X8y _MX} Dy/P"@
9.考虑如下数据表和查询。如何添加索引能提高查询速度?a{ R4R7W/G1tp

.kCn Js;y Rg W#X^ CREATE TABLE MYTABLE ( c]WYi{2s
ID INT,
,Pkz{0{5G(d G(W;O'u V NAME VARCHAR (100), Q%AA(z4D'u-{$c
ADDRESS1 VARCHAR (100),
+o\#a4[3y1s&E6X ADDRESS2 VARCHAR (100), n0c"q2C+p5ABGE
ZIPCODE VARCHAR (10),
1I.i A#X(n:J;q CITY VARCHAR (50), VA!i Is)q#M
PROVINCE VARCHAR (2)
l/qM!U6Z3s Z B )
6shl*^VV SELECT ID, VARCHAR
s:ly7Z1R9q5V FROM MYTABLEa T{#^'Ls
WHERE ID BETWEEN 0 AND 100 str0je }(]?d5c3K
ORDER BY NAME, ZIPCODEK$H$P7\Nn#zC$w~W7h

.Q aI7iq:N6^-F A.给ID添加索引
4z]j&RU0Q B.给NAME和ADDRESS1添加索引 r `Q)n6jC8~)g
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引/g$k~#V1Wcm
D.给ZIPCODE和NAME添加索引
4c H6jJl]M9@2zJ,uw E.给ZIPCODE添加全文检索
!P O:O0R.kt&qa
e6G%@ }?c ^ 9E|#|p:i8A6si
10.执行以下SQL语句后将发生什么?
#Zsq)Z\$[9S i7zw
ig%W ^6\ZO(vq BEGIN TRANSACTIONc;[&@2c3e$q U
DELETE FROM MYTABLE WHERE ID=1)UpLuKH,Oo9f
DELETE FROM OTHERTABLEf ba)b-{.`8c:ou
ROLLBACK TRANSACTIONz)Z;`!kp%ZQJmlsx
8z dN wo3VZ_ O
A.OTHERTABLE中的内容将被删除
6O+?s'M j5vjN3u B.OTHERTABLE和MYTABLE中的内容都会被删除
R {/_&D U+v N C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
K^ P4I"LH D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化^9plL0E R2O1^
E.数据库没用变化
9kvH'Y{7F3HP 5q }g D3qASpC.K

0V.AeU8NN(ugLJ 11.DESC在这个查询中起什么作用?)VC D*f }mf'@:B

\#[ R{tB B SELECT *4J+I8~|^ t YE
FROM MY_TABLE
,T9@&f3M8Cja WHERE ID > 0
yzwhd ORDER BY ID, NAME DESC)WnP7^v^!r-`5Kb3g?
$PW7slp*c9b#`}D3wE\
A.返回的数据集倒序排列
4?!t gb%s2S B.ID相同的记录按NAME升序排列if"l4_i)`iv
C.ID相同的记录按NAME倒序排列
$d6mo*zO8D"P5y:` D.返回的记录先按NAME排序,再安ID排序
T ^sN9nY E.结果集中包含对NAME字段的描述
z Ic5]nQ"^` Mll4x`e|~OX
kgK+kg1r9Wb
12.以下哪个不是SQL函数?#^h]sr$RAE+S
$U*Ng*[R!G@H0o R
A.AVG(Av!bbU{ zm
B.SUM
*R3B8z4e!t8z6Q(B C.MIN-Zgr8I0n_8g
D.MAX5tF OU'},A%Ah
E.CURRENT_DATE()'}bX#d1e.YI\1j

gje+S:` Q :iJf/oed,I-n"[6K
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?O?/DW7UJ8V;F5~S
)p8K7Zb9U
A.该字段必须有索引#j&PG*kc] Q
B.该字段必须包括在GROUP BY条件中yoxY Ib
C.该字段必须包含一个累积值
3gV)Pc6f_@v D.该字段必须是主键9lE}'IO6~@7~@*{}
E.该字段必须不能包含NULL值
6dgIh#_$E\7s5L5g
f WOz*]"]P1zuww E7\$Y(u2O r U8^Z
14.以下查询输出什么?}8V w:Xx:D_n:u+s.{9Y
$?|jCKJ6_w
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
'w,GVA ] ON TABLE1.ID <> TABLE2.ID
M'e/[;m ^W OFB7@"uz u Fd
A.TABLE1和TABLE2不相同的记录
,be!H G(s.dV)U B.两个表中相同的记录v0mYg IV+Hk(Lu
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数g3I uGA
D.两表中不同记录的条数
Yh8C3n-]:`3R P!N E.数字2J:EL3F$~4GZ/}

3k x1W.Csq^ 2u+^O }`5],iV n n;F&Q
15.______能保证一组SQL语句不受干扰的运行?FK}}*E'p6X

G\(t,BM%i0P M 答案:____________
)ig)P7Id"T
7z0Hz8TY |m z4?GNR/U:\

E,`%J]+pI"w 答案速查\&D p G Xv
1:BC
r8@#L:f]U*{ Rz 2:WHERE
}!vNI}_n/^9o 3:B d'U g\vj!Im:r2R(z
4:E
\5Q y*L:Dx%m/a+w 5:BD$[&R(u7G(P5~"]G#s
6:INSERT
zV t#ajh&f0[ 7:C
VuWm@ 8:A
d V+b] U]-z G?-z 9:C
0T$Ct.m!^,Z({'tO7e 10:EMM1|vr _
11:C+sBS0PKhG\t
12:E Z n(Y)c$P1P9H `
13:BC*\"s_u} VBp
14:C
j Ob5B[JN 15:事务
iC)t H/g+e(~^%N`
"Q a8zD@I+Bo (}$H9J^A['_

{1LU6B0u 答案详解,N-L+Bvj
"a'RU \Y:IaF
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。nAvFo+^ ^6H3?

ji ch5XP 2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。#C7D\/e!a TL)oINZ
3E@c1\8| FV$m:L
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。(_)sf/`E#sMf/s
WA n&C^{U4S.r
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
i)`:Z5DRF+^*a 7y Nww:T+U
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
RV'Mh,UN5c7H J 7t5Ai(H;@uc+Y
6.答案显然是INSERT。.eOs Hf b
3Q } Ao,s w;y
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。B7u,A@-?q.p} C
!}_ {f E,s
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。'Bk ]|3a8I!s^
'Xv7i }B2?
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
c5tn1m%_N,@'o g "\}7Rh.~ `1k
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。ss$Y$yeH`*L

%j)H){]5[2J!TlXr7L 11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。 a/d^CJ'C L:YFS
m6W%}c&U8Ab jg
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。 E9\K`j![t
(S;L4L/N;K%a}tM ^
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
*Q`T2p"lBj1vej(D InB@J
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。#YSS]1sH9DG Gd
*[`O,[J2CyF
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。

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


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