标题:
[Zend权威认证试题讲解]第九章 - PHP与数据库
[打印本页]
作者:
admin
时间:
2008-4-17 14:44
标题:
[Zend权威认证试题讲解]第九章 - PHP与数据库
如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
9 V8 p' O' S; K
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
" c7 W5 n4 v) v9 b, J
本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
, w% }/ S( E) h! R
& t" |2 K3 s0 \6 ~; Y& o) P
0 |. j/ M: A3 {& T) [
问题
! N7 j+ y" k9 c6 I& Z7 Y' d$ v: F
: |! s, S7 V& g2 O/ u( {! E' y) ]
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
* e& ^8 g8 s7 P# K$ l
) h' E& M! f5 W/ ^- C- r
SELECT * FROM MY_TABLE
6 M6 Y' z; e* Q. x D
) V$ c) k( [0 i! V7 G5 L
A.如果可能,用把查询转换成存储例程
; b+ A8 w% T4 `' q
B.如果程序允许,给查询指定返回记录的范围
- B0 ?% o4 F1 z6 G
C.如果可能,添加where条件
) j1 V* ]7 c8 k, h2 J/ _
D.如果DBMS允许,把查询转换成视图
) S' N r, R7 n6 h: E, A
E.如果DBMS允许,使用事先准备好的语句
m: o. m1 [8 }% \
1 \; i8 L% [9 V) U. M% ` B
4 Z! |. J6 d5 l- y3 W/ P
2.可以用添加______条件的方式对查询返回的数据集进行过滤?
5 U* l& B" i ?
5 p2 o0 N& z3 H7 m% Y: s
答案:____________
3 S& w3 U' ]% f+ t v: w1 C. a* U( M
: F9 _9 w- H- ?
. [' ^. i5 J4 w. S
3.内关联(inner join)是用来做什么的?
: b6 k: T3 M$ ^* p- a
7 f Q8 k7 C8 E/ S- u
A.把两个表通过相同字段关联入一张持久的表中
' R/ B) `! A; `) j J' v6 E
B.创建基于两个表中相同相同行的结果集
) }) v) N, n0 y8 W0 [
C.创建基于一个表中的记录的数据集
6 e" Y' |# c, w9 V
D.创建一个包含两个表中相同记录和一个表中全部记录的结果集
1 W! J+ e6 W- ?8 E5 A' ~
E.以上都不对
! X5 t8 c6 G+ Z) l$ ?
: g# b8 e2 }! O; `" [4 C- h
' F3 u: s$ D6 g( _
4.以下哪个DBMS没有PHP扩展库?
, a: f4 ]0 r( X% B% b9 B- L7 X
, y$ @& s& V# p" |) x
A.MySQL
& `7 u, {! y% S: _5 h0 U( Y
B.IBM DB/2
5 e2 ]/ I2 X2 ^5 p" x
C.PostgreSQL
, a, o- r5 z" n3 j3 E8 m* [. L
D.Microsoft SQL Server
5 [3 {1 a8 n% g, l
E.以上都不对
( _7 H/ V* q- e: H, _% {& z
9 {7 d$ c e7 P" }
3 M6 N9 u4 \' R! a- A+ ~- B
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
( t( E% q5 n' [. A
: y# ~. D p2 S; ]; U% n$ |7 ?$ A
<?php
: ~/ {; D* Q, v9 N0 o
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
/ q" j* ~6 \( v7 P8 h8 G- v( v
?>
9 A# I4 k) B, o2 ~& h
- L& D+ ]3 ]3 f5 {# {
A.MYTABLE表中的记录超过1条
! P* |7 N \2 p
B.用户输入的数据需要经过适当的转义和过滤
: d% q) ~$ |% n( r6 H, n
C.调用该函数将产生一个包含了其他记录条数的记录
$ Z) s0 W7 l2 e8 C0 }- F7 C
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
( Q$ a/ }( ^6 O |5 G7 l/ l5 R+ a
E.查询语句中应该包含数据库名
8 Y4 J, u0 ^9 x+ {4 [6 \& @
w# K% ^! q2 z5 A5 L5 B! B
, B4 W6 ^1 i0 g
6.______语句能用来向已存在的表中添加新的记录。
" N$ D5 l/ \3 S. W) J/ Y
: ]5 r/ V; N! z! ?- k( G* H$ k& A2 R: q' q
答案:____________
4 _9 `8 k( b* i$ \3 X( ~# C d
2 H, {: L0 p$ f6 Z5 \2 ~) q7 h) c
+ M3 h" x2 V- d1 R) M
7.以下哪个说法正确?
1 ?4 ]3 O Z* y5 D( b
7 D/ a: s! a! N- i. J
A.使用索引能加快插入数据的速度
) P9 q( G8 y4 X0 e$ v3 U
B.良好的索引策略有助于防止跨站攻击
# B" t6 y9 x' x, l- v9 F
C.应当根据数据库的实际应用按理设计索引
) q) l. p" A* \; M$ o/ k
D.删除一条记录将导致整个表的索引被破坏
7 {2 n* b3 Y; I8 P; r7 _
E.只有数字记录行需要索引
, I2 P7 t; L7 t! `# w5 k
( a# g3 S* { ^& e+ v0 @, J! V
% H. E4 o3 R, P0 |; E! O- M }( Y
8.join能否被嵌套?
0 N, t5 N6 l* A9 D
7 _ s i T2 O1 ]' A
A.能
3 s1 w% U7 J' Q f7 |
B.不能
0 ]0 u) L6 L- r# c" g
) J% N# J; `- B% a* x
" {$ J7 S$ A7 U. I8 |$ e( ^* p+ S
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
) \1 M% a Y# ]4 `, p
4 l4 J, y1 ] s7 e Z- ~* B
CREATE TABLE MYTABLE (
& Z7 T2 f2 l2 W: u' s$ e/ S
ID INT,
: R: Q1 d1 s8 P' b
NAME VARCHAR (100),
6 T( |- V" |- [- W! Q' n T
ADDRESS1 VARCHAR (100),
/ Q% P6 O5 [- w
ADDRESS2 VARCHAR (100),
6 T$ P6 y' p9 @3 x
ZIPCODE VARCHAR (10),
& j' t* T- H+ h
CITY VARCHAR (50),
, c3 V6 @# B5 F! f
PROVINCE VARCHAR (2)
* D' l& |& r/ S' h8 g4 N- h/ T
)
, k! t; w$ d( D, n( l
SELECT ID, VARCHAR
1 L4 ?- K q2 h* W: t
FROM MYTABLE
; g4 H. z5 n' n( C* f* b% N$ m5 {
WHERE ID BETWEEN 0 AND 100
6 r# w$ ]7 h# Q6 S
ORDER BY NAME, ZIPCODE
6 I$ _ g3 p+ r8 i$ d" j
; Q7 X# p; q; {
A.给ID添加索引
' \! ~) y8 f# k# t
B.给NAME和ADDRESS1添加索引
- k) } C; j O1 D- r, p- p4 D" s
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引
2 W& h3 s& E& |5 |( R/ W
D.给ZIPCODE和NAME添加索引
8 k6 U' P# P8 k& Y9 H" R; |+ t
E.给ZIPCODE添加全文检索
; t& j5 i! G; t
u9 v7 s/ Z6 G5 T
% t6 G" O/ N9 A" m
10.执行以下SQL语句后将发生什么?
& l* k$ @' j5 m% H9 G$ ~
! w/ @* L9 m9 t
BEGIN TRANSACTION
|5 N W- ?* N, _; H% H D
DELETE FROM MYTABLE WHERE ID=1
" b/ B# F( y; S; o! U C
DELETE FROM OTHERTABLE
+ `9 ]2 y$ }9 i1 W7 D- x* R
ROLLBACK TRANSACTION
% q1 {5 i1 A0 ~& H
$ m6 @& K& m+ u* M4 I
A.OTHERTABLE中的内容将被删除
, ?9 d; L1 ~ z7 Z) W4 ^! E
B.OTHERTABLE和MYTABLE中的内容都会被删除
8 H3 N, F& O4 }: l2 Y
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
( z% A1 U5 J6 @" ^! ~& g7 ?% S
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
- _ g- F6 I. ?$ @' j3 _
E.数据库没用变化
/ W) _( p' v% ^/ F) s1 N6 E3 N
0 h# w* W+ e4 r* @% n
y4 |+ L% ?) H0 l& w6 O2 F
11.DESC在这个查询中起什么作用?
9 y5 h$ ?! ?3 ]
9 U" e5 ]( I9 k, f/ i
SELECT *
7 e5 `" J/ S+ V' k, }1 w( s ^5 t
FROM MY_TABLE
; x$ Q* p2 c, a7 Q+ e0 H- e+ E
WHERE ID > 0
% Q) Y( M/ q, p: A& \ _$ F9 C
ORDER BY ID, NAME DESC
% L& U0 @3 B* n0 F" O" r' O( J
1 D7 ?# p$ h5 S+ E& Z J S1 ?
A.返回的数据集倒序排列
/ `/ ]& \/ B& i8 w
B.ID相同的记录按NAME升序排列
6 }) R1 d7 K# B" c! b) e7 }0 q1 `
C.ID相同的记录按NAME倒序排列
1 Q) ~- S- k8 f- a4 @6 j9 L* `
D.返回的记录先按NAME排序,再安ID排序
/ y4 G' s1 ?, P3 @3 g
E.结果集中包含对NAME字段的描述
) q# Q8 O: I: v9 S
! K z7 W0 W# X; J/ D, ~
# R& D$ ]1 {; o- I; e9 {
12.以下哪个不是SQL函数?
6 x- N/ X( J* T4 s; ?
1 Y" U% ] p* Q/ p
A.AVG
9 c$ Y, \ b$ J& s; f \
B.SUM
a* _9 u# Z9 U4 c8 `
C.MIN
9 `. v# y- x: T, O2 f
D.MAX
- H/ K, L8 n- c6 Z7 D, U
E.CURRENT_DATE()
% Z/ Q9 P5 i% d9 ?
! g) J( c" r! q% ~2 E/ g
* B' a+ U# B' N. ?
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
: x4 R% [6 X* @. o$ ]9 }3 T+ d4 L
5 t0 Q( i4 }/ D* X& F2 d
A.该字段必须有索引
( e* R3 _- E# ^: B7 y0 s
B.该字段必须包括在GROUP BY条件中
/ e0 Z+ O# ?% r
C.该字段必须包含一个累积值
! C6 e. r1 ]7 D. V. a: G
D.该字段必须是主键
1 r* t* |; Y& N l5 [
E.该字段必须不能包含NULL值
/ t( _& \/ x @% P d* G
d2 r- y+ a* x8 z% x
# r5 p' B' r2 n+ D# ], G
14.以下查询输出什么?
# {1 Q2 D7 F% u2 j8 D
5 y: M! \8 O( M0 Y" G! C4 I
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
8 k B. Q* W0 H5 w$ J2 I
ON TABLE1.ID <> TABLE2.ID
2 t# q6 o: R! U7 P" ]: P2 G3 |
6 k* x# O* @' e! |' z- t
A.TABLE1和TABLE2不相同的记录
( n( J' v, A7 X* O/ X
B.两个表中相同的记录
. W* Z- z2 A' w' |! n/ z
C.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
! T3 E3 _$ Z4 Z" h" L
D.两表中不同记录的条数
* e d* |0 A: l/ k
E.数字2
8 A, W6 p6 @3 V2 B( z
% E: e! H# a; [% B( ~
# r/ H6 K+ K, {' Q( }
15.______能保证一组SQL语句不受干扰的运行?
) y9 d* B7 U# F; U
$ z& J; _9 [2 b6 h9 d; A0 _/ c8 K
答案:____________
* Z, ], R6 g1 }5 T, J. E
, O5 X5 o1 w1 e E4 F* J% s, I% t" a
$ K, s2 t* B m$ h; y
! B2 {: L) ^1 T+ m: n2 d
答案速查
4 z8 ~% d) ]+ \0 X1 w9 y1 v; }
1:BC
; J3 {& h+ @, o' b/ ~
2:WHERE
5 X* Q+ ~! E+ O
3:B
3 N. @! L' A8 ^5 ?
4:E
s$ d8 U9 x9 ^; a
5:BD
, Y; l! o0 R# U$ s, r
6:INSERT
+ E" J/ f) ^1 ^% g' `
7:C
: y5 G& G1 |# v( X& k
8:A
9 m8 B7 g% j% U
9:C
5 G5 ~8 Q5 R' I0 y3 V
10:E
" s" W7 E. L/ L& h7 R; b; C/ N
11:C
& Q1 N2 ]2 s& C/ j3 @ {: Y
12:E
: s! s; F8 }" \7 j1 u- y* Z
13:BC
% W# Z' B4 G/ R6 Z: r- n% O/ c
14:C
- E4 u0 t R7 F0 x/ g
15:事务
7 H2 N4 }% N9 X+ V: f0 C9 P
1 w' t' n8 j8 q, H4 x, R9 F4 Q$ A# @- y
6 ?1 K7 N: K* @3 {: R
/ g% h; t9 _- }+ R" w# L( w
答案详解
# l" o0 M: q6 |7 y+ s$ i, G6 g9 a* n0 W
5 F0 B S' v% e# @' N
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
$ o0 ]7 _/ J+ P/ l
3 l' G' B) S2 X9 m' G
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
$ T; j8 A: H( w# Y
3 B* \$ g' k- m9 a0 R2 O! B
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
6 y9 v& K+ d Z# ?+ |
$ j2 O2 u9 T y
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
( i: R% h( | h! ~" e( y/ R
4 p8 ^2 O( j: X
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
5 D3 d; c% i0 }9 G4 O& M1 W
: B: Y: V5 P( | v" e- V2 y
6.答案显然是INSERT。
. s1 U3 V$ e; r# g& d/ o
" o# U1 m" W3 |
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。
0 S# _# X: W' w' z; W+ \
# m: I4 a- b4 C1 G1 Q2 \
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
$ I" H S( N0 X6 t) K% ^
2 T/ h0 O/ n: W/ M: L( Z1 n
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
R4 w$ Z% o x9 g' F" f2 k
' J0 ^3 v; [9 c1 \& [4 u; n
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
# Z# } t7 \2 F/ @6 r% X" o
2 W! P b1 S/ v
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
0 V# Q% a n5 j, g6 z
: [$ s5 }' P; }( A
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
) f7 q- A0 @- r4 f: a/ c! Y
$ u, s3 v" G5 B5 l- R% m5 \
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
5 i: S7 ]' h, |; y$ J
7 u% p+ |& I) |8 X/ C+ b" G
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。
4 g5 W1 r0 ?9 H* e5 \9 k
- V1 k& [, a& r9 j
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。
欢迎光临 捌玖网络工作室 (http://www.89w.org/)
Powered by Discuz! 7.2