|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第九章 - PHP与数据库
如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。3 p- J1 C( V$ o4 Q
PHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
+ B0 o% R) T) r- Q5 b5 ]5 E本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
# g+ k4 }& t4 Q; E3 v' o" G1 [1 N1 Y6 ^; v
J0 h1 D* l% w, u% @! t$ C问题
8 b3 R4 Y& C& j( [% w4 K2 n; B, Q- v+ v
1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
( b. {- l# o4 L% l+ d* d2 x% s
1 _ n% Z2 U0 ySELECT * FROM MY_TABLE/ v5 d4 n7 Q# A; J
, w r( r( }% o7 [, j3 bA.如果可能,用把查询转换成存储例程
" o+ z3 b! o% T# `B.如果程序允许,给查询指定返回记录的范围3 S1 P d* ^9 X4 p' y
C.如果可能,添加where条件
: u: G) e& U* c$ j5 H1 t; t+ y1 S% GD.如果DBMS允许,把查询转换成视图7 o: y$ ?. q5 C
E.如果DBMS允许,使用事先准备好的语句
5 u, m% B6 k; S0 A D* O/ F/ S+ V& o# ]# {5 g" N# U
]! I9 J9 K: J# o+ R2.可以用添加______条件的方式对查询返回的数据集进行过滤?3 \* }2 W3 j8 M' Q( v5 k! l
5 k7 p0 g! U: j9 }0 s- u4 u
答案:____________
) p. Z4 v2 h; e0 F. v* B- V6 I
4 U2 }! D5 C8 ~( T1 m: l0 W2 e( e: I2 ~( H/ w- h; ^) m" W! R
3.内关联(inner join)是用来做什么的?
( R8 O5 U1 b5 f6 W: R% \* Q9 I* c' X+ ~# u7 M$ v7 x( g: {
A.把两个表通过相同字段关联入一张持久的表中
* ?: @) K4 m$ D8 H! k7 V# aB.创建基于两个表中相同相同行的结果集
2 S6 q9 k$ U3 Q* S# `C.创建基于一个表中的记录的数据集
; U' ^, G6 B; l9 j* ]+ r# bD.创建一个包含两个表中相同记录和一个表中全部记录的结果集' j( r" F1 B6 F7 ~2 s: Q
E.以上都不对
D# v' w# p. ~4 w/ Y. k
9 K6 H, M. J& U0 K; {' f2 V4 I! A( P! b( Q4 |4 S% w
4.以下哪个DBMS没有PHP扩展库?1 [* Y! ^1 z# v9 n& V8 j! @
2 W5 v& l! ~/ KA.MySQL$ p+ O2 |5 Q* k E. N: w1 T
B.IBM DB/2
# l/ ^1 ]% f# R+ d5 PC.PostgreSQL6 {& I2 |+ F1 Z# K/ Q$ r
D.Microsoft SQL Server: \3 F5 l1 J' V1 a- d) [
E.以上都不对
7 D$ q5 e, b3 z, d$ q4 W2 w
+ k6 h! p3 N" N h0 F) S0 i4 s1 I3 F0 v/ `
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)& j* u" |1 v) {# t$ c
2 o( f$ a: R: A, ~3 I2 N; @: Y* J
<?php
$ w3 g8 U3 B& _4 }9 @) ^$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);
" r& b7 J+ R3 W0 X: q: b# c4 D?>/ C& Q& K) B O. E
2 E) d5 \. {# w) [# J
A.MYTABLE表中的记录超过1条
0 K; f3 V+ B# A7 TB.用户输入的数据需要经过适当的转义和过滤
$ L1 V4 |$ {5 D# J( ?7 t4 n0 O; {C.调用该函数将产生一个包含了其他记录条数的记录
; O2 v' g6 V0 MD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
! C: h- y! T% w; o6 RE.查询语句中应该包含数据库名
* K: ]! T# j: S, y& }1 o
2 s" l( a: I+ j2 _& i0 E/ S2 l3 Z7 Y) E! r, _! T
6.______语句能用来向已存在的表中添加新的记录。( }4 G t/ E, u6 i! ?0 ~: p! K
8 Z9 L+ N- \/ l0 @; @ |( Z
答案:____________9 z' [7 w; h+ Q. @0 E) r% U
( ]/ P, p3 k+ E- k F8 F
# B9 Y" d: |! G0 O( J8 @7.以下哪个说法正确?
. r3 i& L$ X+ `! a- B( ?9 `. ~ x7 L. Z. J9 i
A.使用索引能加快插入数据的速度
1 n9 W5 Z' S+ [ F- w) t- |B.良好的索引策略有助于防止跨站攻击
3 s' h2 J1 S( g+ n: bC.应当根据数据库的实际应用按理设计索引4 x7 ~; H% j3 \* v, v! P3 G
D.删除一条记录将导致整个表的索引被破坏
4 X/ O/ q3 ?8 V: |8 J( b# N# gE.只有数字记录行需要索引
( ]( q: `: n: e0 a) ]& z
1 B" N& S. N1 N- |( F+ u7 a' H6 K" Q! P ]9 S! k( ]& I* a
8.join能否被嵌套?( Y9 n) x) q5 F! y
; }: |7 f/ r% C$ N+ CA.能# {/ Q. |1 ^) W9 `
B.不能
7 b" o3 M1 a7 A- L
5 q3 P, w6 p2 e1 N: B7 m0 ?5 x
9.考虑如下数据表和查询。如何添加索引能提高查询速度?
$ d7 }0 f% R, [+ q3 ~ A! l5 c, `
3 p3 x9 Y8 } W2 S- s+ TCREATE TABLE MYTABLE (
- v& K6 ]) v# J) d- x2 Z, kID INT,- N/ T, y% @9 Y" D
NAME VARCHAR (100), K* J2 J& \. I" C% y
ADDRESS1 VARCHAR (100),
, s9 s6 P: T2 A" [ADDRESS2 VARCHAR (100),
: ~: j& a2 K' ^. |: n* HZIPCODE VARCHAR (10),
0 s. g+ h% h9 ]9 m* H7 ~CITY VARCHAR (50),; d" a7 L+ |; Y: p
PROVINCE VARCHAR (2)
8 \- K, ]$ D4 U( l)1 }9 X, [0 W+ N9 ~$ Q6 V
SELECT ID, VARCHAR+ n3 d6 Y) d$ y0 D V8 z2 H! Q
FROM MYTABLE$ x) ?7 F) ]4 P7 K% `0 q
WHERE ID BETWEEN 0 AND 100) ~ e6 c% V% X5 R
ORDER BY NAME, ZIPCODE
0 X O b T& z) s6 m# B3 {1 t& D0 g
A.给ID添加索引
; q6 z w8 o# Q+ F( IB.给NAME和ADDRESS1添加索引
+ _, f) \1 Z: @, s! d$ aC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引0 Y: D' o1 ^/ B+ x$ w' W; O
D.给ZIPCODE和NAME添加索引8 |$ H5 K" C3 d5 O T4 o
E.给ZIPCODE添加全文检索
$ g8 V; d8 P' `: }8 r: ?+ I& M
) V S" G/ z( l7 ~: [) d4 v j9 V# V* A# X* [
10.执行以下SQL语句后将发生什么?8 n1 H- Q- p2 \' \
3 _7 o8 M- c% Y3 l, W
BEGIN TRANSACTION1 e# T( q+ G2 N8 ?9 H& U" X
DELETE FROM MYTABLE WHERE ID=1
D* N# i7 [# m g7 E9 zDELETE FROM OTHERTABLE
! Z0 |, g; ?/ k6 c6 AROLLBACK TRANSACTION
# D# }) |5 G0 A3 a8 m6 B
4 ^+ B2 N1 J) O) K& S2 t' gA.OTHERTABLE中的内容将被删除7 ? i6 d- g U" Y. Q* \% {
B.OTHERTABLE和MYTABLE中的内容都会被删除
; n( Q2 r; O: f. H5 z/ mC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
# B+ o3 x/ Q$ m5 R0 i8 g/ KD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
# A8 V1 K% K* r `* {E.数据库没用变化+ l) ~. j+ \1 ~! o
9 x' V3 X% w; |7 w+ l' E% s3 c
" G) b( S5 ^. \
11.DESC在这个查询中起什么作用?
" q3 B# X) v5 g3 W% w/ x
8 w' Q% B4 [- h) I1 N' m- N' ySELECT *
/ D# s) f7 h: o3 G7 DFROM MY_TABLE, O' l6 c6 S" }) R2 A; s
WHERE ID > 0
! Y3 |% Q' n5 g- a( S% yORDER BY ID, NAME DESC
2 o% ?1 E) A/ W
) I1 T$ v, T. E1 e. zA.返回的数据集倒序排列6 H' {2 P9 d3 x: \4 i, d* f
B.ID相同的记录按NAME升序排列5 F" g j) r) F' _
C.ID相同的记录按NAME倒序排列
# S+ Z! ?. ?" P1 LD.返回的记录先按NAME排序,再安ID排序
+ v# }! a5 T/ ~" jE.结果集中包含对NAME字段的描述- z: {$ }) F o3 u5 l+ c
) B8 b7 [- J8 m4 W. V- {/ ^/ h# S
& e* W" b3 f- F0 l7 Q% p
12.以下哪个不是SQL函数?7 ~3 x( n) E! ], U, \ s, n
5 D" ~' H/ T( w Q8 \A.AVG( @& e- V; [* C' H
B.SUM) {' J% y* }5 ~. I1 s
C.MIN: g/ Q" j% `' \
D.MAX1 C ^* \; a9 w9 w# _6 y1 i
E.CURRENT_DATE()
' s9 ~" d- ] J% _/ u' I v
) G6 m O4 G0 h+ c& d( \; \. I# {$ P* U( t
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?9 M$ ^/ P; Y0 K8 p+ c+ p& }
! ]4 F2 ~9 c9 B* z9 t! a
A.该字段必须有索引
7 e* h; m" s, Z% uB.该字段必须包括在GROUP BY条件中
. Z- x- I9 I2 Y0 R( z& OC.该字段必须包含一个累积值
4 h! @. U2 G1 v; F6 A, Z7 a5 BD.该字段必须是主键
0 C4 k5 ?. ^' KE.该字段必须不能包含NULL值3 V& s- E/ \4 n8 Q- a
0 H! z7 U: w; i& ?. E
6 d; f- N) `+ _9 A14.以下查询输出什么?4 w# J y- \+ \
0 t) g9 Q0 s5 ~2 ?1 k! U
SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
3 N/ x/ ?8 |6 }( [) z, bON TABLE1.ID <> TABLE2.ID5 z3 {5 }) Q2 |1 ]& C; A
% Y: i& o, j( a+ U3 I4 G; N
A.TABLE1和TABLE2不相同的记录 o* }0 q6 C% m
B.两个表中相同的记录
; C2 l( m, M& m i% KC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
, M1 V$ d7 c$ f, j, a$ P, rD.两表中不同记录的条数
( i+ p. z+ \0 {- F3 r2 PE.数字2
1 X9 m1 p, O. R7 \/ C$ Z
' \* u" ]' ^3 C6 D+ s% t( ]1 t% ?5 T7 Z
15.______能保证一组SQL语句不受干扰的运行?
/ t. h D4 c8 g: f0 e& H% x2 i2 z
" N% ]1 k5 b0 ^9 v1 M4 F( j g: r答案:____________
4 m H" r8 g6 j( n. @0 b9 ^' M! D4 p6 m+ L0 W x) q% s
+ l7 M- \4 t' t9 E
: g2 U4 m9 ]2 Y& h2 z答案速查1 K! |3 L: P" ^9 Z6 w
1:BC
+ S3 J4 B, @& D s2:WHERE
W- N/ h- n, e4 J3:B1 R6 i! u$ ?7 W' P& ^0 h
4:E
7 J1 E# \5 e& S5 S5:BD
7 f: C$ p9 V* P+ k* J# P9 ^6:INSERT
) p' ]/ R! d9 d* B7:C- m: y" J, D; [2 D1 {
8:A
$ ?! S @0 [! C9:C
* L( ^* }& i& z10:E0 n% D% S1 Q. |) h! A8 I
11:C
: j9 Q2 H I) u: C: ^+ n$ X( K12:E: ?& }" q n8 \6 T
13:BC
9 {2 J$ \* e |14:C
4 ^4 e. \! w" V) v3 A15:事务* A2 v) u7 H3 o. x
4 W: x: M ^. O" f. R3 a
# Y* p y7 O% j: U1 w" K' }
( R6 \3 } z$ E7 O5 Q0 V% e
答案详解
1 z% ~( @( R, g& V: m! S; b
; E: Q; ` H. Z1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
# i. C# j% g/ ` j
* P. R( B. s! C: x2 r8 ~2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
8 \: X1 }' x8 o) s @1 J! l! |% \; c2 E& p
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
3 U0 G( U, s4 D* @* I( d R* c& E/ ]( W$ G0 N
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。+ P+ m3 K! N3 S, R! u$ b! I
) q8 S" b7 I/ k1 S! a5 ~* `
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
, p$ q6 n( ]- Z8 ~" {' N$ Q7 c3 Q3 r2 ~- Q9 ^5 [# _8 S) l# H5 t
6.答案显然是INSERT。
' x5 ~3 H( L g: r% V. G% ~& @
! q& d6 w5 X5 y5 o* t: H7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。: b% H/ V: D& q
- e- L+ M; j! g; a }' _( ]8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
" W- U0 B% ?5 H, ]
4 Y' Z/ U3 d8 A( o& B0 C9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。0 H4 F* y) r# n0 d% B; ?
9 O- L2 [6 `! y" e10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
$ [9 D( E. Q9 w6 f7 h( {, V
? Q" L) i5 C4 ?2 o/ a2 ~8 M& n11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。. _/ k- j: Y' P H/ v) \0 `
$ l! W; K, V* Q" Y4 U9 K
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
# R* @! o1 C! i3 |1 B1 C2 ~+ L' X u. z% p7 U( @, K
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。
3 o4 t; t% o' O6 h5 O& d' z, O
4 L- I2 [3 A e7 x- o( w14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。5 h8 H1 ?& ?4 A9 @
6 ]2 X7 a( V( f. c) b
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。 |
|