|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第九章 - PHP与数据库
如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
! f, G# r- \# yPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
: x8 F: L; d2 N% T! J# v2 B0 @3 g$ Y本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
. B6 s* B8 y! G0 \/ G7 R. L6 I" O6 ]! d9 i) i/ Y! d8 z7 ]% f" y- q7 @- l
+ L# c; b1 l3 r' J; a: q; t+ J' S
问题5 t) A' Z5 a, t8 C* p0 H
7 ?8 R2 ^8 l( m$ a; x1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选)
' w( N4 W! D6 n2 i' g8 i6 b
* O! j9 w7 \. u6 Y9 ]. ySELECT * FROM MY_TABLE
* R9 Q: @) J- B' @# [" q; I1 Y% t$ s+ k# I7 U' {+ X7 o
A.如果可能,用把查询转换成存储例程) U: m6 M; E7 P6 B6 `
B.如果程序允许,给查询指定返回记录的范围
" B! N8 h) r: _% S1 ZC.如果可能,添加where条件3 K7 k/ Q3 p+ O. D' s0 l2 T1 P
D.如果DBMS允许,把查询转换成视图* q$ [. z2 Z C. ^$ y* j
E.如果DBMS允许,使用事先准备好的语句
' v3 I' ]! {, o% B# ]5 v" _. }
7 i. _! \, o. @3 v, x1 D2.可以用添加______条件的方式对查询返回的数据集进行过滤?5 w' n) F9 z6 [
4 r$ \6 p) y1 J8 c% f答案:____________
3 z2 w: I+ Q _4 h1 W0 ?6 |! ]. g" r# w5 x1 T+ Z2 m: g+ f
, [! g/ H$ I/ ^, y5 T3.内关联(inner join)是用来做什么的?8 w. {+ ?. F. X% F8 _/ ]+ }5 Y
. \2 q( B) g# D# C8 LA.把两个表通过相同字段关联入一张持久的表中
/ |7 ]+ H6 d ]- xB.创建基于两个表中相同相同行的结果集
b: K# s5 D. u1 S4 J- S% LC.创建基于一个表中的记录的数据集
6 X( H( u0 y+ S4 d- uD.创建一个包含两个表中相同记录和一个表中全部记录的结果集/ A0 `% r2 v" R, V+ g7 _
E.以上都不对' Z: e$ [+ q) W y1 m: w+ M
( r% W$ m/ D A) h* A8 Q; j
2 z$ h8 |8 L1 W* o) z! _$ J" {# L4.以下哪个DBMS没有PHP扩展库?
0 x/ z) m! h7 E! ?2 K$ K: }, n- Q% v$ e1 o
A.MySQL. F" w; V) @8 k7 Q% v" f
B.IBM DB/2
7 V( u# N n+ |1 _C.PostgreSQL: B# @ o$ G/ E2 O! O9 T- _( h
D.Microsoft SQL Server2 Y, r' A2 r2 A; A
E.以上都不对
& ]4 L, ~ W5 P7 Q. \
; ] O& \8 K+ ]9 g7 J7 ^9 _
4 b5 D, c4 a, D; g# a! J' R! G u5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)
1 f5 Y K# b# {
% r h; F+ M1 d) Z<?php
; u% [0 D- I9 x+ R8 _$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);; V+ C0 n2 R; x6 a* X
?>
" A5 \; ~/ H+ j I) e3 O. w( k: e4 j3 W
' c9 Y, d3 c G% oA.MYTABLE表中的记录超过1条& b2 K+ O u0 @) O0 v
B.用户输入的数据需要经过适当的转义和过滤% H, ?2 w" c" ?3 ~& V
C.调用该函数将产生一个包含了其他记录条数的记录1 v4 Y3 e: H/ ~9 }0 M/ R
D.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除' q. s/ M- m5 l$ y( z7 J5 A& h' e4 J
E.查询语句中应该包含数据库名
! I H2 ^' s( u2 z$ H) Q+ ]& L
) b: F: N( e; C6 d' Y, C
2 T9 ]5 Y5 _: l E6.______语句能用来向已存在的表中添加新的记录。
6 C* T/ o% X; ~7 _6 k$ }5 Y! k
" \9 r% P/ ]7 K1 n+ a$ [答案:____________. z# \# f8 N% ]1 N3 G
/ c4 X; Q) d1 H# b0 Q; w4 k
8 L# i; S7 A5 ]8 P) |- B
7.以下哪个说法正确?9 u" P& g/ {* D( h, `+ x/ a
; `# b* f7 X5 ^! k7 H! \ EA.使用索引能加快插入数据的速度
/ s6 ?3 T% N5 j- SB.良好的索引策略有助于防止跨站攻击, f5 p+ ^1 v1 c( b4 }6 f$ J
C.应当根据数据库的实际应用按理设计索引6 C. N4 F4 L; Y7 }) w& N! Q+ Y
D.删除一条记录将导致整个表的索引被破坏
& [) T7 ]% g0 kE.只有数字记录行需要索引7 Y2 o+ Z7 r8 U+ Y) M
8 S7 g7 U- _" s$ |$ A; W. Y: Y9 _( M1 ~$ l0 O5 U1 ^
8.join能否被嵌套?4 {. m: a; q; q5 O
# Q# H) ^# h. k1 T7 b& I" |
A.能
, N+ W/ W) {# PB.不能* L' R/ ^- W+ `5 v* r
2 Z6 M( l" O! ?" z7 `
# x% A6 Q3 X: K/ l3 G2 y5 }9.考虑如下数据表和查询。如何添加索引能提高查询速度?
: [0 }& O7 W# R7 p
0 }, I% x9 e2 s$ _3 KCREATE TABLE MYTABLE (
" Q0 b! [4 \; k- y7 p& `. sID INT,
8 V4 a0 O: d% u$ @7 a; g; @9 LNAME VARCHAR (100),
6 L% V2 r/ |( ?2 S. b6 d \) XADDRESS1 VARCHAR (100),
3 L! f! M4 ?5 A1 C9 {: [ADDRESS2 VARCHAR (100),1 B( P6 X; u# n7 y* ?
ZIPCODE VARCHAR (10),4 T, ]" Z" s0 i& J
CITY VARCHAR (50),) i& Q6 T4 T, ^! f* F- i" f0 T
PROVINCE VARCHAR (2)
# s/ n! b {) M)
8 b. J9 R( @1 k/ ^SELECT ID, VARCHAR
7 n" v7 Q' n: Y. S! rFROM MYTABLE1 ^4 K+ {; m6 W
WHERE ID BETWEEN 0 AND 100
: h7 t) o: u, h; G1 d$ ^ORDER BY NAME, ZIPCODE
3 X6 C/ Z6 X$ [/ i
2 G4 e8 g/ H; F: ^4 s- u h& DA.给ID添加索引/ P5 \+ v6 ^* R% B* h6 u3 e& q) h+ [
B.给NAME和ADDRESS1添加索引
; b* v. E) h( l' uC.给ID添加索引,然后给NAME和ZIPCODE分别添加索引7 i# I% o* M" O$ z/ u* |
D.给ZIPCODE和NAME添加索引
+ {) o0 S0 g; U" B2 C- b6 {, a) s8 sE.给ZIPCODE添加全文检索
" C. M& I) N2 Q# w$ ~2 c
, [% [8 t7 v" V0 y" r ]/ U/ @7 O7 g1 Z9 N
10.执行以下SQL语句后将发生什么?
! R4 ^0 o7 R( C* k, L/ ^% W7 ?1 u7 Y0 P5 _% x
BEGIN TRANSACTION) R$ i! I* ], f7 D; p* @- F
DELETE FROM MYTABLE WHERE ID=1
' H5 R/ @+ o0 |DELETE FROM OTHERTABLE# Q8 m: L% u% P1 W8 X1 _7 F6 {1 d
ROLLBACK TRANSACTION
7 o1 e6 ?' v: V) M/ W3 |4 t% d: c6 s6 f2 G5 U0 s
A.OTHERTABLE中的内容将被删除! n0 E2 \% a$ D* |: O" O1 `
B.OTHERTABLE和MYTABLE中的内容都会被删除8 p8 c7 S" @! s; u
C.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除
7 q, L* J! L, r1 f0 \% W6 GD.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
- I: o |2 S- Z7 a7 fE.数据库没用变化0 N) N; Y9 G7 y7 j0 f1 T9 U( r# B" ]
' f4 |) L# G. E% d( ^; _" I8 q$ h" O8 F# v+ A5 _; X. }2 Z
11.DESC在这个查询中起什么作用?
6 ]4 D8 Q0 ^' d& T
! ~* S1 w' p* e1 @SELECT *
/ w$ p0 i3 a9 N6 Y$ L9 I, OFROM MY_TABLE) v) g4 |8 u/ ?: d* ^
WHERE ID > 0
4 [! E$ a: G4 [2 |4 j6 ~4 pORDER BY ID, NAME DESC
$ T# N; d4 Y$ Y+ i
7 p" P n3 f+ h, IA.返回的数据集倒序排列5 c% e5 ~( n0 K4 c! }: ]
B.ID相同的记录按NAME升序排列3 z6 [2 G7 w! U( B! G1 `, }! R
C.ID相同的记录按NAME倒序排列5 J( L" c/ K, _7 ?9 v; [; f' e
D.返回的记录先按NAME排序,再安ID排序* S. S( Y B- D
E.结果集中包含对NAME字段的描述
* A3 W, [6 e+ H4 S8 B) h: U
9 `8 Z3 S7 L% B+ ]+ K
# D4 h$ j7 a& ~6 q. t |2 x12.以下哪个不是SQL函数?& C# @& c2 Z0 @
|, k! Z8 R+ N$ d4 E* I
A.AVG: P0 W; S( K6 l7 |4 e! [$ c
B.SUM+ v, N1 f- y3 O/ `$ r
C.MIN
; p7 C5 L: `5 c$ ]! z& C$ |! I% MD.MAX& u8 H3 [6 T. A
E.CURRENT_DATE()6 y: x2 [) v5 z$ i! K/ R; M
4 j5 a& L6 c+ P; E
, [" y( B c- H
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确?
! y2 n7 k. A7 [4 K! q5 ]. T/ q0 J& F* Q7 n6 A
A.该字段必须有索引" f y: k- c/ g" N5 k
B.该字段必须包括在GROUP BY条件中
+ P. T5 X$ c( u5 O) v' ~C.该字段必须包含一个累积值
Z, a0 p: V% iD.该字段必须是主键& Z2 h5 z9 x# F1 c& r7 k
E.该字段必须不能包含NULL值. d4 q/ `" i: f$ N3 |
% z8 v8 @! f' w8 U$ o0 S( J' B
% X! s: l2 h- j: O14.以下查询输出什么?8 I1 S& s1 M7 z* C
" m! b" s9 h( n( o4 B2 ^: U& `SELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE24 o0 m6 \# Z$ h
ON TABLE1.ID <> TABLE2.ID9 [4 M/ w4 a; R6 ~1 `" V: V) U5 D
& q/ ^( D4 W1 r+ G" F; BA.TABLE1和TABLE2不相同的记录' n' ~' U& S Y$ O4 P
B.两个表中相同的记录
# _8 K3 w5 w. M; A4 j& aC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数
! C' c3 ]- s8 N0 L) ] ?D.两表中不同记录的条数
' C# u7 o1 A" z' ~+ N7 pE.数字2 K7 _ x! V7 `* z
9 m) g) A( g1 }$ c9 Z7 D
+ ]: L. D# k2 l% W, z
15.______能保证一组SQL语句不受干扰的运行?
( m0 n `- Z' v7 t. Z) z( [3 H2 M. l9 G: s4 t" m7 ^
答案:____________4 @% M; W3 N4 L8 _ E
4 o0 h- {7 ~5 n& O5 D1 U
9 s9 \5 c& X4 m a# i
: o6 [3 U1 Z9 b. ?
答案速查
! a! s6 U0 p s4 F: o1 e/ l! s1:BC
2 t! ?' J6 e- L. L2:WHERE4 l: a0 G" H$ m2 P1 H, ]! Y- {
3:B3 a9 w; M, ~) w/ M! I9 {* s0 R: k
4:E
/ n7 y& A J& L! w2 `1 u0 U5:BD
6 i/ H5 E4 e/ \& R8 Y6 C% t6:INSERT2 D/ N4 M/ x: q% \) N' {
7:C
7 [8 j) b5 x }: R" I3 e8:A$ c4 z- s; \ V4 K0 `* ]' d' o
9:C, `" S- S) s5 n' \. n4 ?
10:E" w" \( V! p; b' J% W% Y+ U1 U p# k
11:C$ v" }1 V7 x5 m/ u( g5 Z
12:E
1 P8 r) T8 _- t% O13:BC' z+ O3 C4 I0 k$ a2 h7 H5 Y
14:C
: ]( S, n/ X; c+ I% l4 \8 ^) B% ?15:事务
' a R& `' u. O6 ? T3 Z, f, q2 x0 `$ |$ I+ X+ L! V
1 T8 Q+ Q7 b( J2 t
4 m( I' r: ]3 e
答案详解
2 Z7 d* l- t/ a( U4 ?" ~) r' p
3 c6 q; X8 L( g, o! d* c' |9 o, i1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
/ D3 C5 [" V$ V M- @& J0 v
' t* l: ~* D. T2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
- i" P- Q% u& \2 V8 p' S' z# b4 L2 \8 V! m& P
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。
7 k, h7 E: g$ b5 z/ z5 M e9 P% X7 d( ]
4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。
( X. | @/ c& g& Y
% X+ v6 R" w+ p( f5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。- u* f* K" m4 k6 A
$ l( R9 E* O( o, l& X3 c2 V/ p
6.答案显然是INSERT。8 a j3 x) n6 ]3 S. b+ F5 u% g; z- y
1 w N+ f1 H9 e& A/ D, b9 W \7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。1 G1 l/ j/ \+ Z1 v- X
- d: L" Q- z* U' `- t8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。
* ~; Q# }& m; y/ j1 U9 D$ `4 { z" Y `! m3 g& u& e, S
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
$ s. x& V8 v3 z- O1 U1 ^" B0 }7 J
+ Y0 F: j/ ^% `! u4 M10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
" T! P9 L/ Z5 e0 i% w
0 k) P# z. N% Z) L; c8 L+ f, M& [ o11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
5 Y4 ~6 X4 s( q6 t e! @# @, ]9 N( w U: M$ Q9 f0 K# z; [+ g
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
8 J6 Z& b# J6 x" S+ t! s! F' S# z) Y2 D
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。: W& N) K9 r5 P4 V$ W
1 y2 t H" |8 {
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。, `- s* L) h, a% N$ {/ N7 `+ g
- W- d) I* a* t( y3 |+ ?$ I- Y15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。 |
|