|
  
- UID
- 1
- 帖子
- 738
- 精华
- 28
- 积分
- 14443
- 金币
- 2507
- 威望
- 1647
- 贡献
- 1455
|
[Zend权威认证试题讲解]第九章 - PHP与数据库
如果你需要开发动态内容的网站,那么就肯定要用到数据库。尽管现代网站离不开数据库,但很多开发者对它的工作原理仍然知之甚少。
# T1 U3 o: {$ M5 x* I# uPHP支持许多种类的数据库,可PHP认证只和PHP能力有关,所以本章的题目不会专门针对某个特定的数据库管理系统。另外,大多数商业DBMS,比如MySQL AB,都有它们自己的认证课程。
9 v7 a* f; r+ D/ Y本章考察你对数据库原理及数据库编程的相关知识——与特定的DBMS无关。
7 u0 [0 P+ z: m* i1 w/ M* d
d2 _$ R9 |% i+ m5 ~
* t2 l. g7 `9 A l: M问题4 ?, \2 N& S5 C1 j
9 g7 p% M% ^; ]$ |1.考虑如下SQL语句。哪个选项能对返回记录的条数进行限制?(双选); A$ {& a, J8 B5 I
6 A2 n7 p& O; Q0 U
SELECT * FROM MY_TABLE @ C# M1 L4 ?- O/ C- w" w' @, E
0 y( R) l: k3 `( mA.如果可能,用把查询转换成存储例程
; `! z5 A: E, F+ }B.如果程序允许,给查询指定返回记录的范围4 X$ s4 h0 G: n$ r
C.如果可能,添加where条件
! Q) _& ~) g. i9 Q4 rD.如果DBMS允许,把查询转换成视图
+ u9 k d# Y, b1 q% Z/ }' c- z ^, S" SE.如果DBMS允许,使用事先准备好的语句6 v& H. b- M3 G
r0 c- R/ k2 y( ?6 J8 Z% x: j o1 P
6 O# }. L; @- Y9 F5 u9 `2.可以用添加______条件的方式对查询返回的数据集进行过滤?
8 }, v# y& O% ]
/ O- m6 c0 A: {2 j* w8 ?/ A答案:____________ Z2 V i5 l. b. ] ?7 I
6 o; k/ C1 ~' Z8 N- Y0 i4 t& u. e8 L$ v1 x2 ] N
3.内关联(inner join)是用来做什么的?
3 R3 f4 j. V, s5 k) m2 x/ S$ U7 g. Z
4 i# ]3 }& [: U: h! L! V- qA.把两个表通过相同字段关联入一张持久的表中* @+ a! ?4 f* D; X( {
B.创建基于两个表中相同相同行的结果集
) v. B; S! G' QC.创建基于一个表中的记录的数据集
- @/ e. Q( i3 _' mD.创建一个包含两个表中相同记录和一个表中全部记录的结果集
9 K" [9 Q8 Z0 e/ |: f2 ]& aE.以上都不对
o( R7 W2 Z; Z& t1 R8 s# i9 }( i; O% d. h: K5 u1 j! n
$ @# }. S t0 o v3 |4.以下哪个DBMS没有PHP扩展库?/ ^* a7 a% `3 x" l5 C2 O
/ Q2 z+ A3 w$ L! u4 Y8 E/ n
A.MySQL
& _5 k* R* H& I# N2 xB.IBM DB/2
8 q9 {# K" I) g+ VC.PostgreSQL* o/ q8 o5 v2 E5 ^/ V; X) V
D.Microsoft SQL Server
( w, c/ t0 A0 hE.以上都不对8 ?/ G7 H8 N9 ?! Q5 l
0 d: A X5 [! D: r$ [1 p; _5 \, b3 ?* D6 v
5.考虑如下脚本。假设mysql_query函数将一个未过滤的查询语句送入一个已经打开的数据库连接,以下哪个选项是对的?(双选)4 X; g; F6 f" B$ B3 w% A" w4 w) w
8 F h6 O. [& v- \4 [: t0 n! _ E<?php1 I- @1 ]% N- G2 b9 o' i: F$ F
$r = mysql_query ('DELETE FROM MYTABLE WHERE ID=' . $_GET['ID']);4 \- k, j. P/ q$ _
?>
! R3 e% F* ]% H5 |7 f# {
+ E5 j4 U% w) |% f2 w* A9 ~7 lA.MYTABLE表中的记录超过1条9 p1 {( p; o$ c* [
B.用户输入的数据需要经过适当的转义和过滤
0 r1 x( w( m5 O6 nC.调用该函数将产生一个包含了其他记录条数的记录
4 r% @4 B4 n( h' O! W$ S, MD.给URL传递ID=0+OR+1将导致MYTABLE中的所有表被删除
% X9 O/ h5 {4 U4 w- d+ dE.查询语句中应该包含数据库名
" @4 Y) x- Q3 H% j; T
! k. E/ w9 |4 W9 y9 U
' }4 t, g% E l I J3 h9 V7 o b6.______语句能用来向已存在的表中添加新的记录。. w I2 j: ^ V4 ?# u( i$ O
6 b; ~ K. y* e6 A# M: J7 B3 x8 ?答案:____________6 C" y: J# K. b A. N, D
7 G3 \8 C* _3 X* f5 T+ R
. S: d, Y+ _4 f5 ^7.以下哪个说法正确?4 I: |+ D) Z2 _0 V& k( k. y: l
9 n! Q9 A! ^9 ]* ?4 m8 mA.使用索引能加快插入数据的速度/ |% x! F7 Q& g) C+ T+ Q# {
B.良好的索引策略有助于防止跨站攻击
. w2 q0 w8 e' R1 `5 y( a! GC.应当根据数据库的实际应用按理设计索引
; \8 w5 ~% ?# f/ uD.删除一条记录将导致整个表的索引被破坏# E+ W9 ` A- y: l6 ^
E.只有数字记录行需要索引# k! B0 |0 h: r: m1 w4 B" k
: x3 [! Y6 m- o! ^$ a, F# a, ~" g
: z" ?. @) z1 G- D# b8 w6 @9 h8.join能否被嵌套?
; q. b* d" @4 a, H( k& a8 B3 p5 n8 o+ _
A.能( V, H- t; R2 g- S, n$ \6 M
B.不能
/ z/ N+ Y8 q/ N
; U) O( G/ w) X: k F% Z
7 x' Y) g( T) B; @- ~5 i9.考虑如下数据表和查询。如何添加索引能提高查询速度?
, u- F: ?" U/ q) g+ `% t* o" h. t I) }3 \$ _
CREATE TABLE MYTABLE (9 N6 _+ `; h3 v# f
ID INT,) b& I7 e& F# z" _+ R4 d3 r
NAME VARCHAR (100),% \+ z- W5 i% Q* m! v0 b% E0 {
ADDRESS1 VARCHAR (100),
8 Y7 ?! y3 Z! h: ]ADDRESS2 VARCHAR (100),
4 d5 H4 d! r! ?% W% h3 DZIPCODE VARCHAR (10),
4 t" a# E& w/ ~! _# E( OCITY VARCHAR (50),
/ j1 l$ t% f; R# V" P9 LPROVINCE VARCHAR (2). C/ b6 r3 Q9 ^& S, l5 X$ V9 ^ D
)
: W' m! H- X, g0 Y" `( ASELECT ID, VARCHAR7 z1 x/ Z+ ]9 V3 q* A& X- x
FROM MYTABLE3 Z% b( W- k$ l; \- d+ T% e
WHERE ID BETWEEN 0 AND 1007 _5 t2 C; U7 O& M3 \2 P
ORDER BY NAME, ZIPCODE
6 }6 @% L$ q1 O: X `
]6 E( c" d) h [3 B+ J7 u+ CA.给ID添加索引/ m& A2 o$ ?! q2 R2 C
B.给NAME和ADDRESS1添加索引 r- _6 d+ v- g( K7 U. W) O
C.给ID添加索引,然后给NAME和ZIPCODE分别添加索引) f7 Y% D7 l$ A8 f# R7 j/ l, T; E
D.给ZIPCODE和NAME添加索引
@, Q! J' ?1 w) L1 z0 P( z' u u, wE.给ZIPCODE添加全文检索+ Q+ g. A, o8 ^4 A* T' G
. r9 {7 R9 \" `& o8 P
. ]/ }3 Q* d$ l( j) K6 u# y8 @10.执行以下SQL语句后将发生什么? [1 {- \" R3 M, L3 A* K
! L0 B/ D' o0 ]( k8 lBEGIN TRANSACTION# r+ {- |" f5 C0 U: h3 f# K9 a
DELETE FROM MYTABLE WHERE ID=1
& ~6 U/ k) B, Z/ J8 E# ]DELETE FROM OTHERTABLE
& p2 A @& N) D7 z0 PROLLBACK TRANSACTION
2 s5 k2 |9 f$ p, [5 T! ~! {" o) w" e' h {* }
A.OTHERTABLE中的内容将被删除2 D" B' Z. }( k1 E/ l4 t& _9 B
B.OTHERTABLE和MYTABLE中的内容都会被删除
& E- y7 `( k9 h5 a: h' j( M) `( NC.OTHERTABLE中的内容将被删除,MYTABLE中ID是1的内容将被删除+ ]& o# b4 t+ X% O0 ] D
D.数据库对于执行这个语句的用户以外的起来用户来说,没有变化
+ ^3 n I; v- v2 h" D9 \: FE.数据库没用变化: Y: o# B$ m1 G
2 V k# k9 G/ C/ j' \, ]5 r$ C. h6 G4 r
11.DESC在这个查询中起什么作用?
{: H+ b5 l+ ]3 i$ o6 p3 K4 E+ E% v1 B2 r5 E' i
SELECT *
+ H( o" x6 ]7 F! r4 ]2 aFROM MY_TABLE- n ^4 @: Y7 L% Q
WHERE ID > 0" c; U3 D- X' D: g) h( H2 \( F7 ~
ORDER BY ID, NAME DESC
/ M$ o/ f: O4 \' ~6 s; H" F' l( k% ^! x( v% U
A.返回的数据集倒序排列+ J* ? ?1 ]0 a7 _, v8 S; k
B.ID相同的记录按NAME升序排列( v" F2 z" q3 a* w: B
C.ID相同的记录按NAME倒序排列" G) [: L. f* v6 M7 a
D.返回的记录先按NAME排序,再安ID排序
9 o, _' `5 x4 f: C$ t; e% g$ fE.结果集中包含对NAME字段的描述4 x% V) Z2 m5 i- P* ]3 W% c
+ E; v. b% f* Y4 K3 K
6 |* E, k* n, J3 L4 K$ P7 l
12.以下哪个不是SQL函数?
% A2 V- K3 z0 R* T' j5 Y" }) W0 ^5 M; x3 Q3 X
A.AVG5 B8 D' F; Y+ q+ G5 N6 j: |% K
B.SUM1 S( D$ U0 j( D- k. @; u O
C.MIN
: m7 a' B3 }' J' \* SD.MAX4 M6 E5 a/ [3 V' Z) {9 f4 c
E.CURRENT_DATE()
6 U& |" `( {( }1 P5 d
# u6 b( z2 z# _5 }5 s9 E. `4 {% {( h' Z. ]9 t& N
13.如果一个字段能被一个包含GROUP BY的条件的查询语句读出,以下哪个选项的描述正确? ^ `1 @4 ^/ K% ? e# X1 @
+ h* `3 B; p" {
A.该字段必须有索引
1 z; c; u0 H" i4 }( _2 {/ HB.该字段必须包括在GROUP BY条件中
) E& J+ e- a9 Z6 ]C.该字段必须包含一个累积值
: g+ @( d" q' X5 ]+ ~3 `D.该字段必须是主键
* r! k3 u' N+ Y+ Z- HE.该字段必须不能包含NULL值
( J% i5 k8 _6 f7 e0 Z* h+ r7 }9 U& ?! E& C' E/ O' h
7 W2 Z, S0 @" d8 Q0 h( l7 B
14.以下查询输出什么?% u1 S m2 A- w/ c+ y- Q
' Q# `3 F: F0 i3 uSELECT COUNT(*) FROM TABLE1 INNER JOIN TABLE2
% ~/ P4 i' u) k2 L! x; @' oON TABLE1.ID <> TABLE2.ID
9 |" O B4 |/ l5 f
6 D# n. [9 N4 Z2 HA.TABLE1和TABLE2不相同的记录8 d& I. o+ ?/ D$ R; ^ v2 Q
B.两个表中相同的记录
2 p7 n# B( A# [& fC.TABLE1中的记录条数乘以TABLE2中的记录条数再减去两表中相同的记录条数, w+ P/ |& z+ |
D.两表中不同记录的条数
( b2 c: ~& b; O$ Y' k* m3 aE.数字2
4 R8 n. h7 Y% g) R
H9 i% ]( c1 ~1 W
5 @0 S6 q- e; X& P$ ?2 B3 B15.______能保证一组SQL语句不受干扰的运行?
2 T2 R6 \) N# O
+ x; Q3 T* B' {0 N! d/ K* b/ j* K答案:____________! a: M" J4 p8 z2 ~: E/ U
6 q" i& B) u2 J' E7 E1 d. X) t" @) P! _
V) Q2 T. W9 ^. W( g- N答案速查
, D9 G( l+ v0 P g. F1:BC7 o' z+ Y/ r4 j2 M6 `# X. X( s
2:WHERE1 p3 O/ _; P' m, o% Q3 c* j
3:B
- S' U( W: ~+ M5 R4:E
4 x& v+ H# j, y5:BD- s6 W8 j! ]* ^8 F1 |1 d
6:INSERT3 V) u0 k0 P8 [' q/ ]% \
7:C
& o1 B" B7 K) B8 H. h! {$ F3 a8:A
, f) I1 J" _& c5 `9:C# L' T2 S, N( q6 A7 n, L$ _
10:E( H! o& O+ N5 t, g
11:C
( x/ q7 e$ O$ U, J12:E" @$ }( y7 _7 C; E
13:BC
& g/ v5 p S/ T2 D) U5 y14:C
& }8 w1 o; |# C7 p15:事务
! \5 T& B) C* w- \4 u: j6 X1 @; N
1 q, }! E) E3 }6 w }# h' i/ N$ t8 K: l s( Z- C9 L
" V* b' E8 \: D! ?- x
答案详解. w$ n; u/ n5 U$ V# W9 R2 B
. K2 ~2 x6 V' X% d
1.有两个方法能限制返回记录的条数——使用where条件和指定查询返回的记录的范围。通常情况下,如果没有特殊需要,尽量不要用select *,这会浪费大量的数据缓存。答案是B和C。
. V2 x# e7 Q3 V9 B2 ~6 C: C! ^- t0 ^9 R
2.有很多种方式能过滤查询返回的数据,但这题描述的显然是where条件。
: E3 k `, j# v7 A! R; @1 M8 ^" U$ g0 J G0 c8 ] e
3.答案是B。内关联(inner join)把两个表通过一个特定字段关联起来,并创建该字段相同的所有记录的数据集。) D9 D. G+ W4 ~" _. S$ k M, m
5 J' @1 x4 Y1 z# s) h4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。0 J4 S# W* S r6 R+ b/ |0 d
# `8 {. ?( ]$ E; t5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。
! V1 A- C/ {6 _# \1 ]$ b1 M
" H8 |* `/ R! |, J, `, e6.答案显然是INSERT。: {! o- V6 {5 O6 Q7 H1 [( M. N; M
?* s( g" s% M* [% ?. U# d8 _2 D- J7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。5 E& @3 h, D- ~* z( p. ~
: G h2 Q2 ^5 }: R/ C* n- u& N$ i$ u
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。% `, o8 b5 N! t, t# g6 t
" O% L0 V! ?& f: |: t) X+ @4 F* y9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。
& X7 G' d7 U& q3 z. H0 z! e6 E' D6 e5 y
10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。
7 o8 k$ W& v; V m& p2 ~" c
, a2 d3 d+ F5 O& q- Z11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。
) r. K. }& N5 \" }* G( e6 J# q$ G, g
12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。
$ N8 W. \7 o' H/ s" z
1 r) K) k/ m# P) Y6 |13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。6 ?! A& ~ V! t
( ^5 T8 b6 e( E, k- V
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。7 @. ^# K4 N9 m- }5 o
4 o# K) }" g; M
15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。 |
|