" h l: p% R2 y" Q8 X0 T4.答案是E。PHP有PostgreSQL和MySQL扩展库。访问DB/2可以用ODBC,访问Microsoft SQL Server可以用TDS和mssql扩展。这题考验你对PHP的兼容性的了解——在决定开发小组要使用什么数据库时会用得上。 % A$ f8 y# q' J& d A6 {& N3 _3 C
5.答案是B和D。用户输入未经过滤就直接送往了数据库,这非常危险。如果URL包含ID=0+OR+1这样的参数时,实际的查询为DELETE FROM MYTABLE WHERE ID = 0 OR 1,数据库将删除表中所有的记录。5 Y1 |( h; X% O- }0 j
, Z2 {" W8 I+ {- t( i( h/ H" J% N6.答案显然是INSERT。; _; ~" {, W, ^% @5 e) u7 z
3 w# B3 e7 {( r& L' W7 U$ N
7.答案是C。创建合理的索引需要分析数据库的实际用途并找出它的弱点。优化脚本中的冗余查询同样也能提高数据库效率。6 P$ e5 R8 |6 r9 J
1 X# e ]8 P& }7 o3 @+ ~
8.能。你可以嵌套任意数量的join条件,但最终的结果可能并不是你想要的。 # `+ X; y7 Q: g5 ?+ G# X& i6 E7 j. ]: w0 I1 B) d
9.答案是C。给ID字段设置索引能提高where条件执行的效率,给NAME和ZIPCODE设索引则能使排序更快。1 r0 m7 F* R% d: s0 k
: |% K# H" z$ ~" ]% @10.这个查询是一个事务,并且这个事务的最后有回滚,数据库不会有变化,因此答案是E。( {3 B8 }0 A2 r; y
" P' D! t B. N8 F# y+ G
11.答案是C。DESC能反转默认的排序机制。因此在本题中,数据将先按ID升序排列,再按NAME降序排列。6 [2 C) Q E: p1 R4 Y" |2 V
! H/ `8 [. j# E12.CURRENT_DATE函数不是标准SQL中的函数(但某些特定的数据库平台可能包含了这个函数)。0 D2 E& t# G$ a6 w6 r
6 z1 Q, V0 w- P' V3 ?. s
13.答案B和C正确。在标准SQL中,如果出现GROUP BY,结果集中所有的字段都必须是聚集值,或者是GROUP BY结构本身的一部分。某些DBMS——比如MySQL——允许你打破这种规则,但它不按标准的方式执行,并且在其他数据库系统上无效。 . y$ G# D, Q4 r b/ W1 Z0 D8 B& |) A: Y% N
14.本题描述了一种在使用join时常犯的概念性错误。很多人可能觉得这个查询将返回两个表中非共有记录。但实际上数据库却认为是“读出所有ID非共有的记录”。DBMS将读取读取左边表中所有的记录加上右边表中ID非共有的记录。因此,该查询将读取TABLE1中的每条记录乘以TABLE2中的每条记录再减去两表中相同的记录条数。 ' V/ F, n! _ `7 z 6 a9 l0 r* \* ^, A' b4 D& |, p" K15.事务能实现这个功能。事务能将任意个SQL语句组合起来一起执行,或者一起回滚。