`
qjoycn
  • 浏览: 1213013 次
文章分类
社区版块
存档分类
最新评论

SQL语句大全

 
阅读更多
  1. SQL语句大全
  2. SQL语句大全
  3. --语句功能
  4. --数据操作
  5. SELECT--从数据库表中检索数据行和列
  6. INSERT--向数据库表添加新数据行
  7. DELETE--从数据库表中删除数据行
  8. UPDATE--更新数据库表中的数据
  9. --数据定义
  10. CREATETABLE--创建一个数据库表
  11. DROPTABLE--从数据库中删除表
  12. ALTERTABLE--修改数据库表结构
  13. CREATEVIEW--创建一个视图
  14. DROPVIEW--从数据库中删除视图
  15. CREATEINDEX--为数据库表创建一个索引
  16. DROPINDEX--从数据库中删除索引
  17. CREATEPROCEDURE--创建一个存储过程
  18. DROPPROCEDURE--从数据库中删除存储过程
  19. CREATETRIGGER--创建一个触发器
  20. DROPTRIGGER--从数据库中删除触发器
  21. CREATESCHEMA--向数据库添加一个新模式
  22. DROPSCHEMA--从数据库中删除一个模式
  23. CREATEDOMAIN--创建一个数据值域
  24. ALTERDOMAIN--改变域定义
  25. DROPDOMAIN--从数据库中删除一个域
  26. --数据控制
  27. GRANT--授予用户访问权限
  28. DENY--拒绝用户访问
  29. REVOKE--解除用户访问权限
  30. --事务控制
  31. COMMIT--结束当前事务
  32. ROLLBACK--中止当前事务
  33. SETTRANSACTION--定义当前事务数据访问特征
  34. --程序化SQL
  35. DECLARE--为查询设定游标
  36. EXPLAN--为查询描述数据访问计划
  37. OPEN--检索查询结果打开一个游标
  38. FETCH--检索一行查询结果
  39. CLOSE--关闭游标
  40. PREPARE--为动态执行准备SQL语句
  41. EXECUTE--动态地执行SQL语句
  42. DESCRIBE--描述准备好的查询
  43. ---局部变量
  44. declare@idchar(10)
  45. --set@id='10010001'
  46. select@id='10010001'
  47. ---全局变量
  48. ---必须以@@开头
  49. --IFELSE
  50. declare@xint@yint@zint
  51. select@x=1@y=2@z=3
  52. if@x>@y
  53. print'x>y'--打印字符串'x>y'
  54. elseif@y>@z
  55. print'y>z'
  56. elseprint'z>y'
  57. --CASE
  58. usepangu
  59. updateemployee
  60. sete_wage=
  61. case
  62. whenjob_level=’1’thene_wage*1.08
  63. whenjob_level=’2’thene_wage*1.07
  64. whenjob_level=’3’thene_wage*1.06
  65. elsee_wage*1.05
  66. end
  67. --WHILECONTINUEBREAK
  68. declare@xint@yint@cint
  69. select@x=1@y=1
  70. while@x<3
  71. begin
  72. print@x--打印变量x的值
  73. while@y<3
  74. begin
  75. select@c=100*@x+@y
  76. print@c--打印变量c的值
  77. select@y=@y+1
  78. end
  79. select@x=@x+1
  80. select@y=1
  81. end
  82. --WAITFOR
  83. --例等待1小时2分零3秒后才执行SELECT语句
  84. waitfordelay’01:02:03’
  85. select*fromemployee
  86. --例等到晚上11点零8分后才执行SELECT语句
  87. waitfortime’23:08:00’
  88. select*fromemployee
  89. ***SELECT***
  90. select*(列名)fromtable_name(表名)wherecolumn_nameoperatorvalue
  91. ex:(宿主)
  92. select*fromstock_informationwherestockid=str(nid)
  93. stockname='str_name'
  94. stocknamelike'%findthis%'
  95. stocknamelike'[a-zA-Z]%'---------([]指定值的范围)
  96. stocknamelike'[^F-M]%'---------(^排除指定范围)
  97. ---------只能在使用like关键字的where子句中使用通配符)
  98. orstockpath='stock_path'
  99. orstocknumber<1000
  100. andstockindex=24
  101. notstock***='man'
  102. stocknumberbetween20and100
  103. stocknumberin(10,20,30)
  104. orderbystockiddesc(asc)---------排序,desc-降序,asc-升序
  105. orderby1,2---------by列号
  106. stockname=(selectstocknamefromstock_informationwherestockid=4)
  107. ---------子查询
  108. ---------除非能确保内层select只返回一个行的值,
  109. ---------否则应在外层where子句中用一个in限定符
  110. selectdistinctcolumn_nameformtable_name---------distinct指定检索独有的列值,不重复
  111. selectstocknumber,"stocknumber+10"=stocknumber+10fromtable_name
  112. selectstockname,"stocknumber"=count(*)fromtable_namegroupbystockname
  113. ---------groupby将表按行分组,指定列中有相同的值
  114. havingcount(*)=2---------having选定指定的组
  115. select*
  116. fromtable1,table2
  117. wheretable1.id*=table2.id--------左外部连接,table1中有的而table2中没有得以null表示
  118. table1.id=*table2.id--------右外部连接
  119. selectstocknamefromtable1
  120. union[all]-----union合并查询结果集,all-保留重复行
  121. selectstocknamefromtable2
  122. ***insert***
  123. insertintotable_name(Stock_name,Stock_number)value("xxx","xxxx")
  124. value(selectStockname,StocknumberfromStock_table2)---value为select语句
  125. ***update***
  126. updatetable_namesetStockname="xxx"[whereStockid=3]
  127. Stockname=default
  128. Stockname=null
  129. Stocknumber=Stockname+4
  130. ***delete***
  131. deletefromtable_namewhereStockid=3
  132. truncatetable_name-----------删除表中所有行,仍保持表的完整性
  133. droptabletable_name---------------完全删除表
  134. ***altertable***---修改数据库表结构
  135. altertabledatabase.owner.table_nameaddcolumn_namechar(2)null.....
  136. sp_helptable_name----显示表已有特征
  137. createtabletable_name(namechar(20),agesmallint,lnamevarchar(30))
  138. insertintotable_nameselect.........-----实现删除列的方法(创建新表)
  139. altertabletable_namedropconstraintStockname_default----删除Stockname的default约束
  140. ***function(/*常用函数*/)***
  141. ----统计函数----
  142. AVG--求平均值
  143. COUNT--统计数目
  144. MAX--求最大值
  145. MIN--求最小值
  146. SUM--求和
  147. --AVG
  148. usepangu
  149. selectavg(e_wage)asdept_avgWage
  150. fromemployee
  151. groupbydept_id
  152. --MAX
  153. --求工资最高的员工姓名
  154. usepangu
  155. selecte_name
  156. fromemployee
  157. wheree_wage=
  158. (selectmax(e_wage)
  159. fromemployee)
  160. --STDEV()
  161. --STDEV()函数返回表达式中所有数据的标准差
  162. --STDEVP()
  163. --STDEVP()函数返回总体标准差
  164. --VAR()
  165. --VAR()函数返回表达式中所有值的统计变异数
  166. --VARP()
  167. --VARP()函数返回总体变异数
  168. ----算术函数----
  169. /***三角函数***/
  170. SIN(float_expression)--返回以弧度表示的角的正弦
  171. COS(float_expression)--返回以弧度表示的角的余弦
  172. TAN(float_expression)--返回以弧度表示的角的正切
  173. COT(float_expression)--返回以弧度表示的角的余切
  174. /***反三角函数***/
  175. ASIN(float_expression)--返回正弦是FLOAT值的以弧度表示的角
  176. ACOS(float_expression)--返回余弦是FLOAT值的以弧度表示的角
  177. ATAN(float_expression)--返回正切是FLOAT值的以弧度表示的角
  178. ATAN2(float_expression1,float_expression2)
  179. --返回正切是float_expression1/float_expres-sion2的以弧度表示的角
  180. DEGREES(numeric_expression)
  181. --把弧度转换为角度返回与表达式相同的数据类型可为
  182. --INTEGER/MONEY/REAL/FLOAT类型
  183. RADIANS(numeric_expression)--把角度转换为弧度返回与表达式相同的数据类型可为
  184. --INTEGER/MONEY/REAL/FLOAT类型
  185. EXP(float_expression)--返回表达式的指数值
  186. LOG(float_expression)--返回表达式的自然对数值
  187. LOG10(float_expression)--返回表达式的以10为底的对数值
  188. SQRT(float_expression)--返回表达式的平方根
  189. /***取近似值函数***/
  190. CEILING(numeric_expression)--返回>=表达式的最小整数返回的数据类型与表达式相同可为
  191. --INTEGER/MONEY/REAL/FLOAT类型
  192. FLOOR(numeric_expression)--返回<=表达式的最小整数返回的数据类型与表达式相同可为
  193. --INTEGER/MONEY/REAL/FLOAT类型
  194. ROUND(numeric_expression)--返回以integer_expression为精度的四舍五入值返回的数据
  195. --类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT类型
  196. ABS(numeric_expression)--返回表达式的绝对值返回的数据类型与表达式相同可为
  197. --INTEGER/MONEY/REAL/FLOAT类型
  198. SIGN(numeric_expression)--测试参数的正负号返回0零值1正数或-1负数返回的数据类型
  199. --与表达式相同可为INTEGER/MONEY/REAL/FLOAT类型
  200. PI()--返回值为π即3.1415926535897936
  201. RAND([integer_expression])--用任选的[integer_expression]做种子值得出0-1间的随机浮点数
  202. ----字符串函数----
  203. ASCII()--函数返回字符表达式最左端字符的ASCII码值
  204. CHAR()--函数用于将ASCII码转换为字符
  205. --如果没有输入0~255之间的ASCII码值CHAR函数会返回一个NULL值
  206. LOWER()--函数把字符串全部转换为小写
  207. UPPER()--函数把字符串全部转换为大写
  208. STR()--函数把数值型数据转换为字符型数据
  209. LTRIM()--函数把字符串头部的空格去掉
  210. RTRIM()--函数把字符串尾部的空格去掉
  211. LEFT(),RIGHT(),SUBSTRING()--函数返回部分字符串
  212. CHARINDEX(),PATINDEX()--函数返回字符串中某个指定的子串出现的开始位置
  213. SOUNDEX()--函数返回一个四位字符码
  214. --SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0值
  215. DIFFERENCE()--函数返回由SOUNDEX函数返回的两个字符表达式的值的差异
  216. --0两个SOUNDEX函数返回值的第一个字符不同
  217. --1两个SOUNDEX函数返回值的第一个字符相同
  218. --2两个SOUNDEX函数返回值的第一二个字符相同
  219. --3两个SOUNDEX函数返回值的第一二三个字符相同
  220. --4两个SOUNDEX函数返回值完全相同
  221. QUOTENAME()--函数返回被特定字符括起来的字符串
  222. /*selectquotename('abc','{')quotename('abc')
  223. 运行结果如下
  224. ----------------------------------{
  225. {abc}[abc]*/
  226. REPLICATE()--函数返回一个重复character_expression指定次数的字符串
  227. /*selectreplicate('abc',3)replicate('abc',-2)
  228. 运行结果如下
  229. ----------------------
  230. abcabcabcNULL*/
  231. REVERSE()--函数将指定的字符串的字符排列顺序颠倒
  232. REPLACE()--函数返回被替换了指定子串的字符串
  233. /*selectreplace('abc123g','123','def')
  234. 运行结果如下
  235. ----------------------
  236. abcdefg*/
  237. SPACE()--函数返回一个有指定长度的空白字符串
  238. STUFF()--函数用另一子串替换字符串指定位置长度的子串
  239. ----数据类型转换函数----
  240. CAST()函数语法如下
  241. CAST()(<expression>AS<data_type>[length])
  242. CONVERT()函数语法如下
  243. CONVERT()(<data_type>[length],<expression>[,style])
  244. selectcast(100+99aschar)convert(varchar(12),getdate())
  245. 运行结果如下
  246. ------------------------------------------
  247. 199Jan152000
  248. ----日期函数----
  249. DAY()--函数返回date_expression中的日期值
  250. MONTH()--函数返回date_expression中的月份值
  251. YEAR()--函数返回date_expression中的年份值
  252. DATEADD(<datepart>,<number>,<date>)
  253. --函数返回指定日期date加上指定的额外日期间隔number产生的新日期
  254. DATEDIFF(<datepart>,<number>,<date>)
  255. --函数返回两个指定日期在datepart方面的不同之处
  256. DATENAME(<datepart>,<date>)--函数以字符串的形式返回日期的指定部分
  257. DATEPART(<datepart>,<date>)--函数以整数值的形式返回日期的指定部分
  258. GETDATE()--函数以DATETIME的缺省格式返回系统当前的日期和时间
  259. ----系统函数----
  260. APP_NAME()--函数返回当前执行的应用程序的名称
  261. COALESCE()--函数返回众多表达式中第一个非NULL表达式的值
  262. COL_LENGTH(<'table_name'>,<'column_name'>)--函数返回表中指定字段的长度值
  263. COL_NAME(<table_id>,<column_id>)--函数返回表中指定字段的名称即列名
  264. DATALENGTH()--函数返回数据表达式的数据的实际长度
  265. DB_ID(['database_name'])--函数返回数据库的编号
  266. DB_NAME(database_id)--函数返回数据库的名称
  267. HOST_ID()--函数返回服务器端计算机的名称
  268. HOST_NAME()--函数返回服务器端计算机的名称
  269. IDENTITY(<data_type>[,seedincrement])[AScolumn_name])
  270. --IDENTITY()函数只在SELECTINTO语句中使用用于插入一个identitycolumn列到新表中
  271. /*selectidentity(int,1,1)ascolumn_name
  272. intonewtable
  273. fromoldtable*/
  274. ISDATE()--函数判断所给定的表达式是否为合理日期
  275. ISNULL(<check_expression>,<replacement_value>)--函数将表达式中的NULL值用指定值替换
  276. ISNUMERIC()--函数判断所给定的表达式是否为合理的数值
  277. NEWID()--函数返回一个UNIQUEIDENTIFIER类型的数值
  278. NULLIF(<expression1>,<expression2>)
  279. --NULLIF函数在expression1与expression2相等时返回NULL值若不相等时则返回expression1的值
  280. sql中的保留字
  281. actionaddaggregateall
  282. alterafterandas
  283. ascavgavg_row_lengthauto_increment
  284. betweenbigintbitbinary
  285. blobboolbothby
  286. cascadecasecharcharacter
  287. changecheckchecksumcolumn
  288. columnscommentconstraintcreate
  289. crosscurrent_datecurrent_timecurrent_timestamp
  290. datadatabasedatabasesdate
  291. datetimedayday_hourday_minute
  292. day_seconddayofmonthdayofweekdayofyear
  293. decdecimaldefaultdelayed
  294. delay_key_writedeletedescdescribe
  295. distinctdistinctrowdoubledrop
  296. endelseescapeescaped
  297. enclosedenumexplainexists
  298. fieldsfilefirstfloat
  299. float4float8flushforeign
  300. fromforfullfunction
  301. globalgrantgrantsgroup
  302. havingheaphigh_priorityhour
  303. hour_minutehour_secondhostsidentified
  304. ignoreinindexinfile
  305. innerinsertinsert_idint
  306. integerintervalint1int2
  307. int3int4int8into
  308. ifisisamjoin
  309. keykeyskilllast_insert_id
  310. leadingleftlengthlike
  311. lineslimitloadlocal
  312. locklogslonglongblob
  313. longtextlow_prioritymaxmax_rows
  314. matchmediumblobmediumtextmediumint
  315. middleintmin_rowsminuteminute_second
  316. modifymonthmonthnamemyisam
  317. naturalnumericnonot
  318. nullonoptimizeoption
  319. optionallyororderouter
  320. outfilepack_keyspartialpassword
  321. precisionprimaryprocedureprocess
  322. processlistprivilegesreadreal
  323. referencesreloadregexprename
  324. replacerestrictreturnsrevoke
  325. rlikerowrowssecond
  326. selectsetshowshutdown
  327. smallintsonamesql_big_tablessql_big_selects
  328. sql_low_priority_updatessql_log_offsql_log_updatesql_select_limit
  329. sql_small_resultsql_big_resultsql_warningsstraight_join
  330. startingstatusstringtable
  331. tablestemporaryterminatedtext
  332. thentimetimestamptinyblob
  333. tinytexttinyinttrailingto
  334. typeuseusingunique
  335. unlockunsignedupdateusage
  336. valuesvarcharvariablesvarying
  337. varbinarywithwritewhen
  338. whereyearyear_monthzerofill查看全文
  339. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  340. 常用SQL命令和ASP编程
  341. 发表人:kendy517|发表时间:2007年二月09日,11:57
  342. 在进行数据库操作时,无非就是添加、删除、修改,这得设计到一些常用的SQL语句,如下:
  343. SQL常用命令使用方法:
  344. (1)数据记录筛选:
  345. sql="select*from数据表where字段名=字段值orderby字段名[desc]"
  346. sql="select*from数据表where字段名like%字段值%orderby字段名[desc]"
  347. sql="selecttop10*from数据表where字段名orderby字段名[desc]"
  348. sql="select*from数据表where字段名in(值1,值2,值3)"
  349. sql="select*from数据表where字段名between值1and值2"
  350. (2)更新数据记录:
  351. sql="update数据表set字段名=字段值where条件表达式"
  352. sql="update数据表set字段1=值1,字段2=值2……字段n=值nwhere条件表达式"
  353. (3)删除数据记录:
  354. sql="deletefrom数据表where条件表达式"
  355. sql="deletefrom数据表"(将数据表所有记录删除)
  356. (4)添加数据记录:
  357. sql="insertinto数据表(字段1,字段2,字段3…)valuess(值1,值2,值3…)"
  358. sql="insertinto目标数据表select*from源数据表"(把源数据表的记录添加到目标数据表)
  359. (5)数据记录统计函数:
  360. AVG(字段名)得出一个表格栏平均值
  361. COUNT(*|字段名)对数据行数的统计或对某一栏有值的数据行数统计
  362. MAX(字段名)取得一个表格栏最大的值
  363. MIN(字段名)取得一个表格栏最小的值
  364. SUM(字段名)把数据栏的值相加
  365. 引用以上函数的方法:
  366. sql="selectsum(字段名)as别名from数据表where条件表达式"
  367. setrs=conn.excute(sql)
  368. 用rs("别名")获取统的计值,其它函数运用同上。
  369. (5)数据表的建立和删除:
  370. CREATETABLE数据表名称(字段1类型1(长度),字段2类型2(长度)……)
  371. 例:CREATETABLEtab01(namevarchar(50),datetimedefaultnow())
  372. DROPTABLE数据表名称(永久性删除一个数据表)
  373. 在ASP编程时,下面这些语句是必须知道的:
  374. 1.连接数据库
  375. a.ASP与Access数据库连接:
  376. <%@language=VBscript%>
  377. <%
  378. dimconn,mdbfile
  379. mdbfile=server.mappath("数据库名称.mdb")
  380. setconn=server.createobject("adodb.connection")
  381. conn.open"driver={microsoftaccessdriver(*.mdb)};uid=admin;pwd=数据库密码;dbq="
  382. %>
  383. b.ASP与SQL数据库连接:
  384. <%@language=VBscript%>
  385. <%
  386. dimconn
  387. setconn=server.createobject("ADODB.connection")
  388. con.open"PROVIDER=SQLOLEDB;DATASOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称
  389. %>
  390. 建立记录集对象:
  391. setrs=server.createobject("adodb.recordset")
  392. rs.openSQL语句,conn,3,2
  393. 2.记录集对象的方法:
  394. rs.movenext将记录指针从当前的位置向下移一行
  395. rs.moveprevious将记录指针从当前的位置向上移一行
  396. rs.movefirst将记录指针移到数据表第一行
  397. rs.movelast将记录指针移到数据表最后一行
  398. rs.absoluteposition=N将记录指针移到数据表第N行
  399. rs.absolutepage=N将记录指针移到第N页的第一行
  400. rs.pagesize=N设置每页为N条记录
  401. rs.pagecount根据pagesize的设置返回总页数
  402. rs.recordcount返回记录总数
  403. rs.bof返回记录指针是否超出数据表首端,true表示是,false为否
  404. rs.eof返回记录指针是否超出数据表末端,true表示是,false为否
  405. rs.delete删除当前记录,但记录指针不会向下移动
  406. rs.addnew添加记录到数据表末端
  407. rs.update更新数据表记录
  408. 附:
  409. 常数常数值说明
  410. --------------------------------
  411. adLockReadOnly1缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
  412. adLockPrssimistic2当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性。
  413. adLockOptimistic3当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作。
  414. adLockBatchOptimistic4当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作。
  415. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  416. SQLSERVER2000功略(4)---自动化管理
  417. 发表人:kendy517|发表时间:2007年二月09日,11:56
  418. 面对大量反复的工作,即使一个优秀的管理员也会感到很大的负担。但为了保持服务器维持在最佳运行状态,这些又时不得不作的工作。这时,
  419. SQLSERVER想你所想,提供了自动化的管理措施。在我们工作之前,我们需要了解自动化背后的好助手—SQLSERVERAgent,这个就是SQLSERVER的代理
  420. 程序,他是运行在后台的服务,可谓是幕后英雄!那他有什么功能呢,如下:
  421. ①作业调度。
  422. ②执行作业。
  423. ③产生报警。
  424. ④在指定的事件发生时,通知指定的管理员或操作员。
  425. 说到这里,我们就谈谈自动化中的角色:操作员,作业,警报。
  426. 操作员:所谓的操作员只是人名与其通信方式(可有电子邮件地址,呼叫器或NETSEND的目的地三种)的设置而已。只要将服务器管理人员的联络方
  427. 式都以操作员设置妥当时,当SQLSERVER遇到各种需要处理的状况,SQLSERVERAgent就会通过指定的方式通知管理人员前来完成,以达到及时的排除
  428. 各种问题。
  429. 作业:作业是SQLSERVERAgent诸多功能中最常用的。所谓作业就是可让SQLSERVERAgent自动执行的一组操作,它既可以自动执行(这个就涉及到调度
  430. ),也可以手动执行。在定义作业必须注意以下内容:作业的名称,作业的种类,作业的所有者,作业的说明文字。
  431. 警报:就是指针对特殊的事件,要发信给操作员的设置。在作业的设置中的“通知“页面中指定了要将作业执行状态通知操作员时,其实就是在设置
  432. 警报(如下图)
  433. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  434. 在定义警报时,可有两种设置事件的方式,一种是指明了针对某特定事件,也就是只要在服务器发生该事件。另一种是指定事件的严重度(Serverity
  435. ),只要是达到指定严重程度的所有事件,SQLSERVERAgent就会发信通知操作员。
  436. 了解了概念,就是动手的时候了,这些我们就以图片给与说明,第一个我们新建“操作员“,过程如下:
  437. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  438. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  439. 接着新建“作业“过程如下:
  440. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  441. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  442. 再来看看“警报“的创建过程:
  443. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  444. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  445. (注意在建立警报的“响应”栏目里,对应着相应的作业和操作员)
  446. 谈过了这些功能,是不是觉得真是很方便呀,当然了良好的运用不仅仅就这简单的几步,这需要大家在应用中适时的总结以适应我们的需要。现在,
  447. 我们再谈论一个SQLSERVER
  448. 的另一项不错的功能—脚本。
  449. 所谓的利用脚本,就是可以将数据库对象或服务器中的其他对象以脚本(Script)方式存入文件,也就是存成SQL程序以供我们继续利用。
  450. 同样脚本也可以用于这里的自动化管理。例如:我们可以将操作员,作业和警报等对象存成Script文件后,再拿到别的服务器上加以利用。这是不是
  451. 在不同的服务器上创建相同的操作员等重复的工作了。这就是脚本的效率所在。
  452. 如果需要存为脚本文件,可以在企业管理器中右击相应的对象在“所有任务“/“生成SQL脚本”命令,设置确定即可。
  453. 谈了上面的自动化管理的方式是很实用的,但似乎是不是缺乏全面性,要为自己的服务器构建一套完善的自动化维护机制,可能需要花费不少心力,
  454. 但是将大部分的日常维护工作适度的自动化,多少可以减轻管理上的负担,为此SQLSERVER还提供了一项可以将整套数据库维护工作自动化的功能,这
  455. 就是数据库的维护计划。
  456. 我们可以在企业管理器中执行“工具“/数据库维护计划器,这样就见到了如下界面,依次设置即可。
  457. 这次的讨论就说到这里,关于自动化管理,我不用说大家都明白,合理的设置会给你的工作带来什么样的影响,好好体会,让工作更加轻松!
  458. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  459. SQLSERVER2000功略(3)-数据库的登陆及其用户权限
  460. 发表人:kendy517|发表时间:2007年二月09日,11:54
  461. SQLSERVER2000功略(3)-数据库的登陆及其用户权限
  462. SQLSERVER2000功略-数据库的登陆及其用户权限
  463. 说过了两章纯粹的理论,是不是有乏味的感觉,好,我们从这一讲就进入实质的管理阶段。首先,我们讨论的是SQLSERVER安全管理中的登陆和权限问
  464. 题。
  465. SQLSERVER的登陆是安全管理的第一关。这个决定了那些人可以使用SQLSERVER(就像进屋时的房门钥匙)。关于登陆控制,SQLSERVER则采用了两种
  466. 不同的检查方式:windows验证和windows,sqlserver混合验证。前者就是我们登陆windows时的用户帐号,而后者则是在保留前者的前提下也允许
  467. SQLSERVER中建立的登陆帐号。这也是为用户提供方便的选择。
  468. 我们拥有了登陆的帐号,就可以进入SQLSERVER的控制中心,那我们可以做些什么哪?这个肯定是有控制的进行的。SQLSERVER中的访问权限分为两方
  469. 面,分别是:服务器本身的操作权限和数据库的访问权限。我们分别加以简介:
  470. 服务器的操作权限是从真个服务器来说的,是面向所有数据库的定义。例如:是否有权创建或者删除登陆帐号,是否可以建立数据库等等。这些也就
  471. 是通过设置服务器角色(serverrole)来实现的。SQLSERVER内建了七个服务器角色,分别代表七种服务器工作的操作权。
  472. 数据库的访问权限就是针对某一个数据库而言的。他可以分为两层,第一层是限制何人访问数据库,第二层限制可访问数据库中的那些表,视图和存
  473. 储过程,以及是否可以用select,insert,update等等。这个权限往往是通过数据库角色得以实现的。
  474. (服务器角色不可以自定义,数据库角色可以自定义)
  475. 仅仅知道上面这些概念是不行的,因为SQLSERVER中的权限是比较复杂的,因为彼此之间可能存在某些权链。所以仅仅概念是不容易说清的,我们讨论
  476. 的就是基础的东西,懂得了这些在真正工作中才可以更好的掌握管理技能。我们简单的谈谈权链的问题吧!
  477. 由于每个对象都有他自己的拥有权信息,这个对象可能和其他对象存在一定的依存关系,比如:一个视图是从另外一个视图建立过来的。这些相互依
  478. 存的对象关系可能拉的很长,因此相依存的对象的拥有权就形成一个由上而下的链结,这在SQLSERVER中就称作拥有权链(OwnershipChain)。正是
  479. 由于这样,可能所产生的访问权限变得非常复杂。所以,我们在这里提出以视图和存储过程来限制访问范围。通过视图确定用户可以访问的内容,然
  480. 后把视图的相关权限赋予具体的用户,这样可以有效的减轻权限设置的工作量(特别是用户访问范围跨度较大的情况下)。除了视图,我们也可以自
  481. 定义存储过程来对数据的访问加以限制,即把一组可查询某特定数据的语句存成存储过程,然后将其execute权限设置给用户,用户就可以执行他来取
  482. 得数据了。这样省去了很多复杂的授权过程,是不是很方便呀!
  483. 简单的说了说这些,我们再来谈谈SQLSERVER中特殊的东西:sa帐号,public数据库角色,guest数据库用户。
  484. Sa是SQLSERVER默认的管理员帐号,主要是为了向下兼容而设置的。这个也就是安装好SQLSERVER时就有的帐号,而且权限极大,所以在安装过程中最
  485. 好把他的密码进行设置,不要为空。这个帐号相当于服务器角色中的systemadministrator,而且不可以删除。
  486. Public数据库角色是一个公共的数据库角色,也就是说当你新建一个数据库角色的时候,默认的就属于这个角色。这个也是不可删除的。所以为了安
  487. 全期间,我们对public数据库对象不要赋予过多的权限(除非有这个需要)。
  488. Guest是一个特殊的数据库用户,类似于windowsNT/2000下的guest帐号,都是给未经授权的用户提供某种程度的访问权限。如果不需要这个用户可以
  489. 将其删除。
  490. 说了这些概念,其实现都是通过“企业管理器”实现的,我们就这些谈谈用相应的系统存储过程:
  491. 登陆管理:sp_addlogin新增帐号
  492. sp_droplogin删除帐号
  493. sp_grantlogins允许某windows帐号访问
  494. sp_denylogins禁止某windows帐号访问
  495. sp_revokelogins删除某windows帐号访问
  496. sp_helplogin查看帐号信息
  497. sp_addsrvrolemember将某用户添加到服务器角色
  498. sp_dropsrvrolemember将某用户从数据库角色中删除
  499. sp_helpsrvrole查看服务器角色的信息
  500. 数据库用户管理:sp_grantaccess建立数据库用户
  501. sp_revokedbaccess删除数据库用户
  502. sp_helpuser查看用户信息
  503. 数据库角色管理:sp_addrole建立数据库角色
  504. sp_addrolemember将用户加入数据库角色
  505. sp_helprole查看数据库角色信息
  506. sp_helprolemember查看某数据库角色的所有成员
  507. sp_droprole删除角色
  508. sp_droprolemember删除角色中的某一成员
  509. 好了,看了上面的不要感觉麻烦呀,这可是让你高效工作的宝贝呀,熟能生巧,我们一起联系多了,其实掌握就觉得很轻松了!继续努力!:)
  510. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  511. SQLSERVER2000攻略(1)-工作流程篇
  512. 发表人:kendy517|发表时间:2007年二月09日,11:51
  513. SQLSERVER2000是windows平台上一个重要的数据管理工具。了解数据库的朋友对他一定很熟悉。我们就此在这里作一系列的讨论,希望通过这次的交
  514. 流我们对SQLSERVER2000有个深刻的理解。首先,我们探讨一下他的工作流程,这可是工作的基础呀,好,我们开始了!
  515. 简单的说,SQLSERVER2000是个采用主从结构的关系数据库系统。哈,是不是太简单,毕竟现在市面上的数据库产品几乎都是这个结构。我们来深入一
  516. 点,所谓SQLSERVER的主从结构(Client/Server),就是由SQLSERVER扮演存放数据和提供数据给客户端的角色,当用户要取用数据时,则可调用各种
  517. 不同的客户端应用程序,通过SQLSERVER所支持的接口,向SQLSERVER提供请求,然后取得数据库中的数据并返回给用户。这个过程应该好理解吧。
  518. 看了这个是不是觉得很easy呀!其实,这只是比较传统的双层式Client/Server结构,近年来三层式或者多层式主从结构的应用正在流行。例如:配合
  519. 微软的BackOffice中的其他服务器产品,即可建立多层主从运算模式。
  520. 了解了基本的数据流程,那是不是要问是什么实现客户端与服务器之间的沟通哪?这个是个比较有意义的问题。我们知道了作什么,就应改知道他是
  521. 怎么做的。所谓,打破沙锅问到底!我们说一下工作原理:SQLSERVER提供了多种不同的接口让客户端(应用程序)顺利与服务器进行交流,在此接口
  522. 的基础上,由NET-Library(网络函数库)建立两边IPC(InterprocessCommication)通讯管道来进行工作。具体的说就是:当客户端程序使用某种接
  523. 口向服务器提出查询请求时,数据库接口驱动程序调用客户端的Net-library,而Net-library则调用IPC应用程序接口产生IPC,通过IPC送达服务端,
  524. 服务端接受请求后经SQLSERVER处理,以同样的方式将结果送回客户端。(这个过程有两个情况,Client和Server在同一台计算机上,Net-library会
  525. 使用localIPC,如果是网络存取,则会有双方所使用的网络协议产生RemoteIPC)图示如下:
  526. 了解了外部工作机制,咱们看看服务端是怎么分工的,毕竟多数的数据工作是由服务器完成的。整体上说,整个SQLSERVER的数据管理系统分为如下几
  527. 个组件:
  528. ▲OpenDataService(ODS):负责处理由Net-library送来的查询请求,ODS会调用SQLSERVER的内部功能来完成客户端的需求。
  529. ▲SQLServerService:这个SQLSERVER的“心脏”负责管理我们的数据库,以及所有建立,查询和修改的数据库的操作。此数据库管理系统的核心又
  530. 分为几个单元,其中最主要的两个单元就是负责解SQL语法和安排查询执行计划等工作的关系引擎(RelationalEngine),以及负责管理数据库文件和
  531. 文件读写等工作的存储引擎(StorageEngine)。这两个组件之间则是通过OLEDB接口来通信的。
  532. ▲SQLSERVERAgent(SQLSERVER代言程序):可以说此组件是重要性仅次于SQLSERVERService的组件,这个服务提供了有关工作编排,以及服务器
  533. 有问题时通知管理员等相关功能的支持。
  534. ▲MSDTCService:如果将SQLSERVER安装在多台服务器上,要让客户端能够在单个事务中对不同的服务器(数据源)进行处理,就须借助MSDTC
  535. (MicrosoftDistributedTransactionCoordinator)Service来负责这类分布式事务的协调工作,以确保在各个数据库上的更改操作能正确完成。
  536. 了解了上面的过程,是不是有点印象了,来我们理清一下思路,问一下自己:客户端的工作请求怎么传递给服务器的?服务器又是怎么处理相应的请
  537. 求的?认真想想这两个问题,其实你会觉得原来“不过如此”!^_^
  538. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  539. SQLSERVER中使用存储过程(StoredProcedure)
  540. 发表人:kendy517|发表时间:2007年二月09日,11:50
  541. 随着SQLSERVER不断的学习,认识的深入,我们会发现越来越多的功能呈现在我们面前,这些功能都是十分强大的,在我们应用中发挥着十分有意义的
  542. 作用,也因此感知作为一个大型的数据库管理系统的魅力所在。从这一篇开始,我们着手讨论“存储过程“,”触发器“,”游标“,”事务“和”
  543. 锁“的应用,如果熟练的掌握了这些,我想驾驭SQLSERVER的能力将是一个新的层次。学习是为了应用,掌握就是为了解决问题。希望通过我们一起的
  544. 学习,我们都可以很好的利用这个工具为我们服务。这是我们学习的目的也是我们的奋斗目标。好,我们继续吧!
  545. 说起存储过程,我们先了解他的概念,这是我们讨论必走的第一步:存储过程就是将所需要的工作,预先以SQL程序写好,命名后进行保存,以后需要
  546. 作这些工作时可以使用EXECUTE指令来调用,即可自动完成相应任务。这里的存储过程也是自动化的一个方面,总之就是为了方便管理的一种措施。让
  547. 我来说说他的优点吧:
  548. 1.执行效率高(这点不容置疑)
  549. 2.统一的操作流程:也就是通过存储过程的操作避免了一些操作过程中可能无意中认为的错误,只要确定了制作存储过程时是正确地,以后在调用过
  550. 程中就不用担心了。大家使用时流程是一样的。
  551. 3.重复使用
  552. 4.安全性:这一点我们在数据库的安全策略里讨论过,可以参考前边的文章。也就是说:我们可以利用存储过程作为数据存储的管道。可以让客户在
  553. 一定的范围内对数据进行操作。另外,存储过程是可以加密的,这样别人就看不到他的内容了。
  554. 存储过程分为三类:
  555. 系统存储过程(SystemstoredProcedure)sp_开头,为SQLSERVER内置存储过程:
  556. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  557. 扩展存储过程(ExtendedstoredProcedure),也就是外挂程序,用于扩展SQLSERVER的功能,以sp_或者xp_开头,以DLL的形式单独存在。
  558. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  559. Δ(观察上面的你会发现系统存储过程和扩展存储过程都是在master数据库中。sp_开头的可是全局的,任何一个数据库都可以直接调用的。)
  560. 用户定义的存储过程(User-definedstoredProcedure),这个就是用户在具体的数据库中自己定义的,名字最好不要以sp_和xp_开头,防止混乱。
  561. 了解了基本概念,就到应用的阶段了。
  562. 首先创建一个存储过程(在pubs数据库中),我们命名为MyProce示例代码如下(功能为向stores表中插入stor_id,stor_name两个字段值):
  563. createprocedureMyProce
  564. @param1char(4),@param2varchar(40)--定义参数,作为存储过程的接口
  565. withencryption--存储过程加密
  566. asinsertstores(stor_id,stor_name)values(@param1,@param2)
  567. go
  568. 我们如此调用:
  569. execMyProce‘111111’,’Leijun’book’--参数赋值,调用存储过程
  570. 用企业管理器创建如图所示:
  571. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  572. 如果我们要修改,可以查看相应的存储过程的“属性“,如上图在”文本“窗体中修改。
  573. 但是注意我们这个因为用了withencryption语句,所以,打开时将有下面的提示,不允许查看,这也就是加密。
  574. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  575. 看了上面的是不是有所了解了,其实创建时还有其他的参数可以使用,我们这里只是一个简单的例子,更多的应用需要我们在实践中不断的总结,这
  576. 样才能更加灵活的应用。下面我们再来看一个创建的例子(这个的作用是在authors表中查找一个人名,表中把一个名字分为两字段存储了,如果查到
  577. 了,打印“查有此人ID:”及其au_id字段值):
  578. CREATEprocedureSearchMe
  579. @param1varchar(10),@param2varchar(30)
  580. as
  581. select@param2=au_id
  582. fromauthors
  583. whereau_fname+au_lname=@param1
  584. if@@rowcount>0--全局变量,记录影响到的行
  585. print'查有此人ID:'+@param2
  586. GO
  587. 我们这样执行:ExecSearchMe‘leijun’,null
  588. 由于查找到了所以显示如下:
  589. screen.width-333)this.width=screen.width-333"border="0"galleryimg="no"/>
  590. 例子就简单列举这些,因为他的灵活性很大,所以我们只简单的说明一下,如果要更好的利用,这就需要我们不断的摸索了。
  591. 下面我们谈谈使用过程中我了解到的注意事项:
  592. 1.在存储过程中,有些建立对象的语句是不可使用的:createdefault,createtrigger,createprocedure,createview,createrule.
  593. 2.在同一数据库中,不同的所有者可以建立相同名称的对象名。例如:a.sample,b.sample,c.sample三个数据表可以同时存在。如果存储过程中未指
  594. 明对象的所有者(例如存储过程中的语句select*fromsample,这句中的sample没有指明所有者),在执行的过程中默认的所有者查找顺序是:相
  595. 应的存储过程的建立者->相应数据库的所有者。如果这个查找过程中没有把所有者确定下来,系统就要报错。
  596. (这里我额外插一句:如果需要严密的数据操作,在任何操作中尽量加上所有者,例如leijun.sample)
  597. 3.在存储过程名称前边添加#或者##,所建立的存储过程则是“临时存储过程“(#是局部临时存储过程,##是全局临时存储过程)。
  598. 上面的都是一些容易忽略的,特别是第二条,我们一定的认真思考,也许这些有意无意的忽略是我们造成错误的根源!!
  599. 转载自:leijun
  600. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  601. [Php+APACHE+MySQL][或在windows已装IIS下的]配置
  602. 发表人:kendy517|发表时间:2007年二月09日,09:30
  603. 前段时间的文章:
  604. http://www.blueidea.com/bbs/NewsDetail.asp?id=2372560
  605. 可以一看,但是其对本篇价值是1%.希望本篇能补充之缺陷.
  606. 一:下载安装程序
  607. Apache可以从http://httpd.apache.org/download.cgi下载
  608. PHP可以从http://www.php.net下载.
  609. mysql在www.mysql.com/下载.
  610. 二安装程序(以下以2k为例说明,其他windows系统的类似)
  611. 首先如果您安装了IIS的话,Internet服务管理器--->默认web站点-->右击--->停止.
  612. 1:先是Apache,有4.2M左右,没啥说的,点击安装到D盘,为了方西系统重装,D盘方便.一路会很容易的安装的成功.
  613. 2:php5.1.X的安装版是2.44m左右,可以点击安装,选择服务器的时候选择apache,不过,没有组建扩展,还有下载扩展的dll文件包(有的19m左右,
  614. 不一定),复制到C:WINNT目录下面的.可以直接复制到d盘文件下面也可以,笔者不知道为什么选择了第一种.
  615. 3:MySQL我下载的是4.1.7版本,36.7M左右,也是一路点击,然后启动之.
  616. 三:必要设置
  617. 如果我们要使用CGI二进制文件,那么我们要将如下指令插入到Apache的httpd.conf配置文件中,以设置CGI二进制文件:
  618. PHP以CGI方式安装到Apache:
  619. ScriptAlias/php/"D:/php/"
  620. AddTypeapplication/x-httpd-php.php
  621. Actionapplication/x-httpd-php"/php/php.exe"
  622. 如果我们想把PHP作为Apache2.0的模块,那么就一定要移动php4ts.dll到winnt/system32(WindowsNT/2000)或windows/system32
  623. (WindowsXP),覆盖原有文件(如果有的话),对于PHP5,这个文件是php5ts.dll。然后我们要插入如下两行到httpd.conf中,以使我们的
  624. PHP作为Apache的PHP-Module安装:
  625. PHP以模块方式安装到Apache:
  626. ;ForPHP5dosomethinglikethis:
  627. LoadModulephp5_module"c:/php/php5apache2.dll"
  628. AddTypeapplication/x-httpd-php.php
  629. 添加这2行代码到httpd.conf,httpd.conf文件可通过计算机搜索找出.哈哈....
  630. 再在里面找出:
  631. DocumentRoot"D:/web/web/php"
  632. 相关行,可以修改成自己的php网站根目录.
  633. 如果你把那些扩展都复制到C:winnt下面的话.
  634. 测试:<html>
  635. <body>
  636. <?phpinfo();?>
  637. </body>
  638. <html>
  639. 应该:正常可以看到的.
  640. 关于连接MySQL的,请看:
  641. http://www.blueidea.com/bbs/NewsDetail.asp?id=2408054
  642. 为了您的IIS能继续工作,请在internet信息服务--->默认web站点-->右击属性--->IP地址:192.168.1.105,端口:81,否则会提示端口以已使用
  643. 之类的信息.
  644. 完毕,有问题请马上提出,早安.
  645. 天气:大雨,ccdot发表于2006-1-212:48:43,阅读了460次,共有个1回复.
  646. 花了大半天的时间,终于把全新的php平台建了起来,历经了太多错误和反复,看了网上无数篇教材,可仍错漏百出,唉,真不知道那些写教程的人在
  647. 写什么。不过苍天不负有心人,摸索了好久,最终还是成功了.:)..写下来,以后也有个参照。
  648. 调试环境如下:
  649. OS:win2000sp4
  650. apache_2052-win32(msi格式)
  651. php-5.0.2-Win32(zip包)
  652. mysql-5.0.1-alpha-snapshot-win(zip包)
  653. 所有程序(apache,php,mysql)安装在F:/server目录下。
  654. ●解压php到f:/serverphp文件夹中。
  655. PHP.ini的一些配置
  656. .doc_root=F:/phpf//默认php文档位置,设为apache中一样,偶没设,却也行!!
  657. .extension_dir=F:/server/php/ext//扩展文件位置,用作支持mysql,一定要设正确
  658. .session.save_path=c:/temp//session存储位置
  659. .cgi.force_redirect=0//如果出现SecurityAlert!ThePHPCGIcannotbeaccesseddirectly的警告,设置此值
  660. .register_global,把它设置为on. //避免post变量不能传递
  661. .display_errors=on//显示错误消息
  662. ●装好apache到f:/server/apache2,首先让Apache2能支持php5
  663. 1、打开apache的配置文件,添加如下两行(php安装在F:/server/php下)
  664. .AddTypeapplication/x-httpd-php.php
  665. .LoadModulephp5_moduleF:/server/php/php5apache2.dll
  666.  这样就已经可以支持了php了,不知网上的教程里为什么还要把那些dll文件复制得满天飞(版本是相同的),郁闷。
  667. 2、httpd.conf的一些其他必要设置:
  668. .索引页名称DirectoryIndexindex.php
  669. .默认文档位置,设置DocumentRoot路径
  670. 3、网上流传的配置,我没有copy,但也成功了。
  671. .把php5ts.dll复制到winnt目录或system目录中
  672. ●安装mysql到f:/servermysql中。运行bin目录中winmysqladmin.exe。设置你的用户名和密码,端口不必更改。
  673. ●接着让PHP支持Mysql数据库
  674. .将安装目录中的php.ini-recommended复制到winnt目录中,改名为php.ini
  675. 查找[MySQL]字段内的内容.修改如下.
  676. mysql.default_port=3306
  677. //这里是MYSQL的端口.
  678. mysql.default_host=localhost
  679. //这里是本地主机.
  680. mysql.default_user=root
  681. //这里是用户
  682. mysql.default_password=abcdefg
  683. //这里是密码
  684. 修改到这里就可以让Php与MYSQL关联了.
  685. 最后启动PHP对MYSQL模块支持.
  686. 查找extension=php_mysql.dll字串.删除掉前面的;号
  687. extension=php_mysql.dll
  688. 请注意.如果不启动PHP对MYSQL模块支持.将无法使PHPMYADMIN正常工作.将提示:
  689. cannotloadMySQLextension,pleasecheckPHPConfiguration
  690. 无法装入MySQL扩展,请检查PHP的配置。
  691. 可是我设置完这样,重启apache却出现找不到libmySQL.dll动态链接库的提示,几经折磨才发现,必须把php中的libmysql.dll复制到apache中的bin
  692. 目录中才ok(网上教材可没有)。
  693. ●让apache也支持mysql
  694. 把php目录下的libmySQL.dll复制到apache的bin目录下。
  695. ok,调试phpinfo(),一切正常。可是我写了句echo"我爱你";,就出现了中文乱码。老问题,从网上搜得一段话,顺利解决了问题。
  696. ●原因很简单,由于Apache它默认的编码是西欧编码,你只要在“httpd.conf”中找到“AddDefaultCharsetISO-8859-1”将它修改为
  697. “AddDefaultCharsetGB2312”,保存然后重新启动Apache再试,可能有的朋友的已经解决了,但还是有很多的朋友的网站依然是乱码,包括我的,
  698. 这是什么原因呢,网上也有介绍把它改为“AddDefaultCharsetoff”,可能在你的网站也不一定行得通,实质问题在于它是由网页制作软件引起的
  699. ,如果你使用的是Macromedia公司的Dreamweaver系列软件制作的,由于它的编码为“gb2312”,所以就会出现乱码,因此你只要在你网页的代码中找
  700. 到“”,把“gb2312”改为“GB2312”然后保存网页,再试试看,行了吧!是不是太简单了,但是我为了把这乱码问题解决,也足足花了二天的时间
  701. 才找到真正的原因,如果你做好了,别忘记请我喝酒呀!
  702. 分类:(一般分类)::评论(1)::静态链接网址::引用(0)
  703. MSSQL经典语句
  704. 发表人:kendy517|发表时间:2007年二月09日,09:24
  705. 1.按姓氏笔画排序:Select*FromTableNameOrderByCustomerNameCollateChinese_PRC_Stroke_ci_as
  706. 2.数据库加密:selectencrypt('原始密码')
  707. selectpwdencrypt('原始密码')
  708. selectpwdcompare('原始密码','加密后密码')=1--相同;否则不相同encrypt('原始密码')
  709. selectpwdencrypt('原始密码')
  710. selectpwdcompare('原始密码','加密后密码')=1--相同;否则不相同
  711. 3.取回表中字段:declare@listvarchar(1000),@sqlnvarchar(1000)
  712. select@list=@list+','+b.namefromsysobjectsa,syscolumnsbwherea.id=b.idanda.name='表A'
  713. set@sql='select'+right(@list,len(@list)-1)+'from表A'
  714. exec(@sql)
  715. 4.查看硬盘分区:EXECmaster..xp_fixeddrives
  716. 5.比较A,B表是否相等:if(selectchecksum_agg(binary_checksum(*))fromA)
  717. =
  718. (selectchecksum_agg(binary_checksum(*))fromB)
  719. print'相等'
  720. else
  721. print'不相等'
  722. 6.杀掉所有的事件探察器进程:DECLAREhcforeachCURSORGLOBALFORSELECT'kill'+RTRIM(spid)FROMmaster.dbo.sysprocesses
  723. WHEREprogram_nameIN('SQLprofiler',N'SQL事件探查器')
  724. EXECsp_msforeach_worker'?'
  725. 7.记录搜索:开头到N条记录
  726. SelectTopN*From表
  727. -------------------------------
  728. N到M条记录(要有主索引ID)SelectTopM-N*From表WhereIDin(SelectTopMIDFrom表)OrderbyIDDesc
  729. ----------------------------------
  730. N到结尾记录
  731. SelectTopN*From表OrderbyIDDesc
  732. 8.如何修改数据库的名称:sp_renamedb'old_name','new_name'
  733. 9:获取当前数据库中的所有用户表selectNamefromsysobjectswherextype='u'andstatus>=0
  734. 10:获取某一个表的所有字段selectnamefromsyscolumnswhereid=object_id('表名')
  735. 11:查看与某一个表相关的视图、存储过程、函数selecta.*fromsysobjectsa,syscommentsbwherea.id=b.idandb.textlike'%表名%'
  736. 12:查看当前数据库中所有存储过程selectnameas存储过程名称fromsysobjectswherextype='P'
  737. 13:查询用户创建的所有数据库select*frommaster..sysdatabasesDwheresidnotin(selectsidfrommaster..sysloginswhere
  738. name='sa')
  739. 或者
  740. selectdbid,nameASDB_NAMEfrommaster..sysdatabaseswheresid<>0x01
  741. 14:查询某一个表的字段和数据类型selectcolumn_name,data_typefrominformation_schema.columns
  742. wheretable_name='表名'
  743. [n].[标题]:Select*FromTableNameOrderByCustomerName
  744. [n].[标题]:Select*FromTableNameOrderByCustomerNamefrom:http://tb.blog.csdn.net/TrackBack.aspx?PostId=585515
  745. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  746. 触发器-MSSQL常用操作
  747. 发表人:kendy517|发表时间:2007年二月09日,09:18
  748. 不再新开文章.
  749. 这里只打算讲解四部分了,也就最简单、最常用的四部分。
  750. 1、触发器。
  751. 定义:何为触发器?在SQLServer里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
  752. 常见的触发器有三种:分别应用于Insert,Update,Delete事件。(SQLServer2000定义了新的触发器,这里不提)
  753. 我为什么要使用触发器?比如,这么两个表:
  754. CreateTableStudent(--学生表
  755. StudentIDintprimarykey,--学号
  756. ....
  757. )
  758. CreateTableBorrowRecord(--学生借书记录表
  759. BorrowRecordintidentity(1,1),--流水号
  760. StudentIDint,--学号
  761. BorrowDatedatetime,--借出时间
  762. ReturnDAteDatetime,--归还时间
  763. ...
  764. )
  765. 用到的功能有:
  766. 1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号);
  767. 2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。
  768. 等等。
  769. 这时候可以用到触发器。对于1,创建一个Update触发器:
  770. CreateTriggertruStudent
  771. OnStudent
  772. forUpdate
  773. As
  774. ifUpdate(StudentID)
  775. begin
  776. UpdateBorrowRecord
  777. SetStudentID=i.StudentID
  778. FromBorrowRecordbr,Deletedd,Insertedi
  779. Wherebr.StudentID=d.StudentID
  780. end
  781. 理解触发器里面的两个临时的表:Deleted,Inserted。注意Deleted与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。
  782. 一个Update的过程可以看作为:生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除Student记录并写入新纪录。
  783. 对于2,创建一个Delete触发器
  784. CreatetriggertrdStudent
  785. OnStudent
  786. forDelete
  787. As
  788. DeleteBorrowRecord
  789. FromBorrowRecordbr,Deltedd
  790. Wherebr.StudentID=d.StudentID
  791. 从这两个例子我们可以看到了触发器的关键:A.2个临时的表;B.触发机制。
  792. 这里我们只讲解最简单的触发器。复杂的容后说明。
  793. 事实上,我不鼓励使用触发器。触发器的初始设计思想,已经被“级联”所替代.
  794. 来自:http://www.innerv.com/blogview.asp?logID=512
  795. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  796. MSSQL数据库导出和导入
  797. 发表人:kendy517|发表时间:2007年二月09日,09:17
  798. SQLServer导出导入数据方法2004-02余枫一、导出导入SQLServer里某个数据库1.在SQLServer企业管理器里选中要转移的数据库,按鼠标右键
  799. ,选所有任务->备份数据库。2.备份选数据库-完全,目的备份到按添加按钮文件名在SQLServer服务器硬盘下输入一个自定义的备份数据库文
  800. 件名(后缀一般是bak)重写选重写现有媒体最后按确定按钮。如果生成的备份数据库文件大于1M,要用压缩工具压缩后再到Internet上传输。3.通
  801. 过FTP或者remotedesktop或者pcanywhere等方法把第二步生成的备份数据库文件或者其压缩后的文件传到目的SQLServer数据库,如果有压缩要解
  802. 压。4.目的SQLServer数据库如果还没有此数据库,先创建一个新的数据库;然后选中这个新创建的数据库,按鼠标右键,选所有任务->还原数据库
  803. 还原->从设备->选择设备->磁盘->添加(找到要导入的备份数据库文件名)->确定还原备份集->数据库-完全最后按确定按钮。完全的数据库导入成
  804. 功了。(如果在已经存在的SQLServer数据库上还原数据库可能遇到有还有其它人正在使用它而恢复操做失败,可以去看->管理->当前活动->锁/对
  805. 象->找到数据库下锁的进程号->到查询分析器里用kill进程号杀掉这些锁,然后再做还原)注意:如果在原有的目的SQLServer数据库上从备份文件
  806. (*.bak)还原数据库会把已经存在的表、存储过程等数据库对象全部替换成最近这次导入的备份数据库里的内容。如果一定要还原备份文件(*.bak)里
  807. 部分数据,需要另外建一个新数据库,其逻辑名称和数量同备份文件(*.bak)里数据库的逻辑名称和数量一致;新数据库的物理文件名称取得一定要和
  808. 备份文件(*.bak)里数据库的物理文件不一样才行。二、导出导入SQLServer里某个表1.没有防火墙,同一个局域网里或不在同一个局域网里,但通
  809. 过Internet可以互相访问在SQLServer企业管理器里选中目的数据库,按鼠标右键,选所有任务->导入数据->弹出数据转换服务导入/导出向导窗口
  810. ->下一步->选数据源->数据源(用于SQLServer的MicrofostOLEDB提供程序)->服务器(可选择局域网内能访问到的所有SQLServer服务器,或者
  811. 直接输入IP地址)->选择使用windows身份验证还是使用SQLServe身份验证(输入数据库的用户名和密码)->数据库(可选择上面选中SQLServer服务
  812. 器上所有权限范围内的数据库)->下一步->选择目的->目的(用于SQLServer的MicrofostOLEDB提供程序)->服务器(默认为上一步里选中的导出
  813. 服务器,也可以选其它局域网内能访问到的所有SQLServer服务器,或者直接输入IP地址)->目的数据库(可选择上面选中SQLServer服务器上所有权
  814. 限范围内的数据库)->下一步->制定表复制或查询->选从源数据库复制表和视图(也可以选择用一条查询指定要传输的数据)->下一步->选择源表和视
  815. 图->在要导入的表和视图前面选中源->目的出现同样的表名(可以手工修改成别的表名)->转换->列映射和转换里面可以修改源表和目的表之间字段的
  816. 对应关系,修改目的表字段的类型和长度等,并可以选择创建目的表,在目的表中增加行,除去并重新创建目的表,启用标志插入等选项->确定->下
  817. 一步->保存、调度和复制包->时间->立即运行(如果要实现隔一段时间自动导出导入数据,选调度DTS包以便以后执行)->保存(可以不选)->[保存
  818. DTS包(如果以后还要转移这批相同的数据,可以把本次导出导入的内容和步骤保存起来,存到SQLServer即可,保存的时候要输入DTS的包名及详细
  819. 描述)->下一步->]->完成正在执行包->图形界面显示创建表及插入记录的步骤和状态->完成2.经过防火墙,不在同一个局域网里①、导出表里的数
  820. 据到文本文件:在SQLServer企业管理器里选中目的数据库,按鼠标右键,选所有任务->导入数据->弹出数据转换服务导入/导出向导窗口->下一步
  821. ->选数据源->数据源(用于SQLServer的MicrofostOLEDB提供程序)->服务器(可选择局域网内能访问到的所有SQLServer服务器)->选择使用
  822. windows身份验证还是使用SQLServe身份验证(输入数据库的用户名和密码)->数据库(可选择上面选中SQLServer服务器上所有权限范围内的数据
  823. 库)->下一步->选择目的->目的(文本文件)->文件名(在自己的电脑硬盘中生成一个自定义的文本文件)->下一步->制定表复制或查询->选从源数据
  824. 库复制表和视图(也可以选择用一条查询指定要传输的数据)->下一步->选择目的文件格式->源(选择要导出的表)->用默认的带分隔符->选第一行包含
  825. 有列名称选项->下一步->保存、调度和复制包->时间->立即运行(如果要实现隔一段时间自动导出到文本文件,选调度DTS包以便以后执行)->保存
  826. (可以不选)->[保存DTS包(保存的时候要输入DTS的包名及详细描述)->下一步->]->完成正在执行包->图形界面显示表到文本文件的步骤和状态->完成
  827. 如果生成的文本文件大于1M,要用压缩工具压缩后再到Internet上传输。②、通过FTP或者remotedesktop或者pcanywhere等方法把第①步生成的文
  828. 本文件或者其压缩后的文件传到目的SQLServer数据库,如果有压缩要解压。③、把文本文件导入目的SQLServer数据库直接把文本文件导入目的
  829. SQLServer数据库里跟文本文件同名的新表名时,默认的会把所有字段类型都变成字符串。所以我们要这样做:在源SQLServer数据库上先生成创
  830. 建表的sql语句在SQLServer查询分析器里->选中源数据库里表名->按右键->在新窗口中编写对象脚本->创建->复制下新窗口内创建表名的sql语句
  831. 到目标SQLServer数据库上查询分析器里执行创建表名的sql语句,生成空表结构。(如果已经存在这样的表名,修改建表的sql语句,在表名后面加
  832. 上导入时间的年月信息,例如table_0113)调用导入/导出工具->弹出数据转换服务导入/导出向导窗口->下一步->选数据源->数据源(文本文件)
  833. ->文件名(已传到目的SQLServer数据库下要导入的文本文件,后缀可以不是*.txt,但是常规文本编辑器能打开的文件,文件类型选全部)->下一步
  834. ->选择文件格式->用默认的带分隔符->选第一行包含有列名称选项->下一步->制定列分割符->逗号->下一步->选择目的->目的(用于SQLServer的
  835. MicrofostOLEDB提供程序)->服务器(可选择目标局域网内能访问到的所有SQLServer服务器)->选择使用windows身份验证还是使用SQLServe身份
  836. 验证(输入数据库的用户名和密码)->数据库(可选择上面选中SQLServer服务器上所有权限范围内的数据库)->下一步->选择源表和视图->修改目的
  837. 表名为刚才创建的表名->转换(在目的表中追加行)->下一步->保存、调度和复制包->时间->立即运行(如果要实现隔一段时间自动把文本文件导入
  838. ,选调度DTS包以便以后执行)->保存(可以不选)->[保存DTS包(保存的时候要输入DTS的包名及详细描述)->下一步->]->完成正在执行包->图形界面
  839. 显示文本文件到表的步骤和状态->完成如果要更改导入时间的年月信息的表名,例如table_0113到原来的表名,在企业管理器里把原来的表名改成
  840. table_old_0113,table_0113改名成table。这会对应用程序里频繁访问的表照成一定的中断。注意:源表上的建的索引和主键约束不能用上面介绍
  841. 的1和2方法转移过来,还需要手工来建索引和主键。标志种子和notnull的约束可以继承过来。导入视图时会把源视图里所有的真实数据导入成一
  842. 个新表,而不是视图。三、SQLServer存储过程或用户定义的函数导出导入1、导出存储过程或用户定义的函数成*.sql文件在SQLServer企业管理
  843. 器里选中源数据库,存储过程->单选或者多选中要转移的存储过程->用户定义的函数->单选或者多选中要转移的函数->按鼠标右键,选所有任务->
  844. 生成SQL脚本->确定->在自己的电脑硬盘中生成一个自定义的*.sql文件->保存->正在生成SQL脚本->成功2、如果目的数据库经过防火墙,不在同一
  845. 个局域网里,要通过FTP或者remotedesktop或者pcanywhere等方法把第1步生成的*.sql文件传到目的SQLServer数据库服务器上。3、用查询分析
  846. 器进入SQLServer目的数据库,从菜单里选文件->打开->打开查询文件->选中第1步生成的*.sql文件->点执行查询的绿色倒三角型快捷键->查询窗口
  847. 里会出现执行后的消息(有时候可能因为存储过程和用户定义的函数之间有一定的依赖关系,会报一些错。最好先执行用户定义的函数的*.sql文件,
  848. 再执行存储过程的*.sql文件)四、ORACLE数据库里表导入SQLServer数据库1、在目的SQLServer数据库服务器上安装ORACLEClient软件或者
  849. ORACLEODBCDriver.在$ORACLE_HOMEnetworkadmintnsnames.ora里配置ORACLE数据库的别名(servicename)。具体配置方法可以参考本站文章:客户
  850. 端连服务器的注意事项2、在WIN2000或者win2003服务器->管理工具->数据源(ODBC)->系统DSN(本机器上NT域用户都可以用)->添加->ORACLEODBC
  851. Driver->完成->datasourcename可以自定义,我一般填ORACLE数据库的sid标志,description里可以填ORACLE数据库详细描述,也可以不填->
  852. datasourceservicename填第1步定义的ORACLE数据库别名->OK。(用户DSN和文件DSN也可以类似配置,但使用的时候有一些限制)3、SQL
  853. Server的导入和导出数据工具里->选数据源->数据源(其它(ODBC数据源))->选第2步在ODBC里定义的系统DSNsourcename,用户名密码处填写
  854. ORACLE系统的用户名和密码->下一步->选择目的,选SQLServer数据库(跟上面第二点讲的一致,就不重复了)。注意:在ORACLE表和SQLServer
  855. 表之间'转换'那步很重要,可以改变默认的字段数据类型,如image->text,decimal->int五、SQLServer数据库里表导入ORACLE数据库方法一.导
  856. 出目的选通过ODBC数据源里定义的ORACLE数据库,注意ORACLE里表名都是大写的.我一般在ORACLE这边先生成好表结构,再选择SQLSERVER源表往
  857. ORACLE目的表里追加数据.数据传输速度比方法二慢.方法二.从SQLServer数据库导入数据到ORACLE数据库可以选择用Windows下ORACLE9i企业或者
  858. 个人版数据库做中转。具体配置方法可以参考这两篇文章:Oracle异构服务实践在ORACLE里设置访问多个SQLServer数据库注意:ORACLE通过访问
  859. SQLServer的数据库链接时,用select*的时候字段名是用双引号引起来的。查看全文
  860. 分类:(一般分类)::评论(3)::静态链接网址::引用(0)
  861. MySQL数据库导出和导入
  862. 发表人:kendy517|发表时间:2007年二月09日,09:14
  863. 1).MySQLimport的语法介绍:
  864.   MySQLimport位于MySQL/bin目录中,是MySQL的一个载入(或者说导入)数据的一个非常有效的工具。这是一个命令行工具。有两个参数以及大量
  865. 的选项可供选择。这个工具把一个文本文件(textfile)导入到你指定的数据库和表中。比方说我们要从文件Customers.txt中把数据导入到数据库
  866. Meet_A_Geek中的表Custermers中:
  867.   MySQLimportMeet_A_GeekCustomers.txt
  868.   注意:这里Customers.txt是我们要导入数据的文本文件,而Meet_A_Geek是我们要操作的数据库,数据库中的表名是Customers,这里文本文件的
  869. 数据格式必须与Customers表中的记录格式一致,否则MySQLimport命令将会出错。
  870.   其中表的名字是导入文件的第一个句号(.)前面文件字符串,另外一个例子:MySQLimportMeet_A_GeekCus.to.mers.txt
  871.   那么我们将把文件中的内容导入到数据库Meet_A_Geek中的Cus表中。
  872.   上面的例子中,都只用到两个参数,并没有用到更多的选项,下面介绍MySQLimport的选项
  873.   2).MySQLimport的常用选项介绍:
  874.   选项功能
  875.   -dor--delete新数据导入数据表中之前删除数据数据表中的所有信息
  876.   -for--force不管是否遇到错误,MySQLimport将强制继续插入数据
  877.   -ior--ignoreMySQLimport跳过或者忽略那些有相同唯一关键字的行,导入文件中的数据将被忽略。
  878.   -lor-lock-tables数据被插入之前锁住表,这样就防止了,你在更新数据库时,用户的查询和更新受到影响。
  879.   -ror-replace这个选项与-i选项的作用相反;此选项将替代表中有相同唯一关键字的记录。
  880.   --fields-enclosed-by=char指定文本文件中数据的记录时以什么括起的,很多情况下数据以双引号括起。默认的情况下数据是没有被字符
  881. 括起的。
  882.   --fields-terminated-by=char指定各个数据的值之间的分隔符,在句号分隔的文件中,分隔符是句号。您可以用此选项指定数据之间的分隔符
  883.   默认的分隔符是跳格符(Tab)
  884.   --lines-terminated-by=str此选项指定文本文件中行与行之间数据的分隔字符串或者字符。默认的情况下MySQLimport以newline为行分隔符
  885.   您可以选择用一个字符串来替代一个单个的字符:
  886.   一个新行或者一个回车。
  887.   MySQLimport命令常用的选项还有-v显示版本(version),-p提示输入密码(password)等。
  888.   3).例子:导入一个以逗号为分隔符的文件
  889.   文件中行的记录格式是这样的:
  890.   "1","ORD89876","1DozenRoses","19991226"
  891.   我们的任务是要把这个文件里面的数据导入到数据库Meet_A_Geek中的表格Orders中,我们使用这个命令:
  892.   bin/MySQLimport–prl–fields-enclosed-by="–fields-terminated-by=,Meet_A_GeekOrders.txt
  893.   这个命令可能看起来很不爽,不过当你熟悉了之后,这是非常简单的。第一部分,bin/MySQLimport,告诉操作系统你要运行的命令是MySQL/bin
  894. 目录下的MySQLimport,选项p是要求输入密码,这样就要求你在改动数据库之前输入密码,操作起来会更安全。我们用了r选项是因为我们想要把表中
  895. 的唯一关键字与文件记录中有重复唯一关键字的记录替换成文件中的数据。我们表单中的数据不是最新的,需要用文件中的数据去更新,因而就用r这
  896. 个选项,替代数据库中已经有的记录。l选项的作用是在我们插入数据的时候锁住表,这样就阻止了用户在我们更新表的时候对表进行查询或者更改的
  897. 操作。
  898.   批处理是一种非交互式运行MySQL程序的方法,如同您在MySQL中使用的命令一样,你仍然将使用这些命令。
  899.   为了实现批处理,您重定向一个文件到MySQL程序中,首先我们需要一个文本文件,这个文本文件包含有与我们在MySQL中输入的命令相同的文本
  900.   比如我们要插入一些数据,使用包含下面文本的文件(文件名为New_Data.sql,当然我们也可以取名为New_Data.txt及任何其他的合法名字,并不
  901. 一定要以后缀sql结尾):
  902.   USEMeet_A_Geek;
  903.   INSERTINTOCustomers(Customer_ID,Last_Name)VALUES(NULL,"Block");
  904.   INSERTINTOCustomers(Customer_ID,Last_Name)VALUES(NULL,"Newton");
  905.   INSERTINTOCustomers(Customer_ID,Last_Name)VALUES(NULL,"Simmons");
  906.   注意上面的这些句子的语法都必须是正确的,并且每个句子以分号结束。
  907.   上面的USE命令选择数据库,INSERT命令插入数据。
  908.   下面我们要把上面的文件导入到数据库中,导入之前要确认数据库已经在运行,即是MySQLd进程(或者说服务,WindowsNT下面称为”服务“,
  909. unix下面为”进程“)已经在运行。
  910.   然后运行下面的命令:
  911.   bin/MySQL–p</home/mark/New_Data.sql
  912.   接着按提示输入密码,如果上面的文件中的语句没有错误,那么这些数据就被导入到了数据库中。
  913.   命令行中使用LOADDATAINFILE从文件中导入数据到数据库:
  914.   现在您可能会问自己,"究竟为什么我要输入所有的这些SQL语句到文件中,然后通过程序运行它们呢?”
  915. 这样看起来好像需要大量的工作。很好,你这样想很可能就对了。但是假如你有从所有这些命令中产生的log记录呢?现在这样就很棒,嗯,大多数数
  916. 据库都会自动产生数据库中的事件记录的log。而大部分log都包含有用过的原始的SQL命令。因此,如果您不能从您现在的数据库中导出数据到新的
  917. MySQL数据库中使用,那么您可以使用log和MySQL的批处理特性,来快速且方便地导入您地数据。当然,这样就省去了打字的麻烦。
  918.   LOADDATAINFILE
  919.   这是我们要介绍的最后一个导入数据到MySQL数据库中的方法。这个命令与MySQLimport非常相似,但这个方法可以在MySQL命令行中使用。也就是
  920. 说您可以在所有使用API的程序中使用这个命令。使用这种方法,您就可以在应用程序中导入您想要导入的数据。
  921.   使用这个命令之前,MySQLd进程(服务)必须已经在运行。
  922.   启动MySQL命令行:
  923.   bin/MySQL–p
  924.   按提示输入密码,成功进入MySQL命令行之后,输入下面的命令:
  925.   USEMeet_A_Geek;
  926.   LOADDATAINFILE"/home/mark/data.sql"INTOTABLEOrders;
  927.   简单的讲,这样将会把文件data.sql中的内容导入到表Orders中,如MySQLimport工具一样,这个命令也有一些可以选择的参数。比如您需要把自
  928. 己的电脑上的数据导入到远程的数据库服务器中,您可以使用下面的命令:
  929.   LOADDATALOCALINFILE"C:MyDocsSQL.txt"INTOTABLEOrders;
  930.   上面的LOCAL参数表示文件是本地的文件,服务器是您所登陆的服务器。
  931.   这样就省去了使用ftp来上传文件到服务器,MySQL替你完成了.
  932.   您也可以设置插入语句的优先级,如果您要把它标记为低优先级(LOW_PRIORITY),那么MySQL将会等到没有其他人读这个表的时候,才把插入数
  933. 据。可以使用如下的命令:
  934.   LOADDATALOW_PRIORITYINFILE"/home/mark/data.sql"INTOTABLEOrders;
  935.   您也可以指定是否在插入数据的时候,取代或者忽略文件与数据表中重复的键值。替代重复的键值的语法:
  936.   LOADDATALOW_PRIORITYINFILE"/home/mark/data.sql"REPLACEINTOTABLEOrders;
  937.   上面的句子看起来有点笨拙,但却把关键字放在了让您的剖析器可以理解的地方。
  938.   下面的一对选项描述了文件的记录格式,这些选项也是在MySQLimport工具中可以用的。他们在这里看起来有点不同。首先,要用到FIELDS关键字
  939. ,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:
  940.   TERMINATEDBYcharacter
  941.   ENCLOSEDBYcharacter
  942.   ESCAPEDBYcharacter
  943.   这些关键字与它们的参数跟MySQLimport中的用法是一样的.The
  944.   TERMINATEDBY描述字段的分隔符,默认情况下是tab字符(t)
  945.   ENCLOSEDBY描述的是字段的括起字符。比方以引号括起每一个字段。
  946.   ESCAPEDBY描述的转义字符。默认的是反些杠(backslash:).
  947.   下面仍然使用前面的MySQLimport命令的例子,用LOADDATAINFILE语句把同样的文件导入到数据库中:
  948.   LOADDATAINFILE"/home/mark/Orders.txt"REPLACEINTOTABLEOrdersFIELDSTERMINATEDBY','  ENCLOSEDBY'"';
  949.   LOADDATAINFILE语句中有一个MySQLimport工具中没有特点:
  950.   LOADDATAINFILE可以按指定的列把文件导入到数据库中。
  951.   当我们要把数据的一部分内容导入的时候,这个特点就很重要。比方说,我们要从Access数据库升级到MySQL数据库的时候,需要加入一些栏目(
  952. 列/字段/field)到MySQL数据库中,以适应一些额外的需要。
  953.   这个时候,我们的Access数据库中的数据仍然是可用的,但是因为这些数据的栏目(field)与MySQL中的不再匹配,因此而无法再使用
  954. MySQLimport工具。尽管如此,我们仍然可以使用LOADDATAINFILE,下面的例子显示了如何向指定的栏目(field)中导入数据:
  955.   LOADDATAINFILE"/home/Order.txt"INTOTABLEOrders(Order_Number,Order_Date,Customer_ID);
  956.   如您所见,我们可以指定需要的栏目(fields)。这些指定的字段依然是以括号括起,由逗号分隔的,如果您遗漏了其中任何一个,MySQL将会提
  957. 醒您^_^
  958.   ImportingDatafromMicrosoftAccess(从Access中导入数据,略)
  959.   您可以看到MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半。另外的一般是从MySQL数据库中导出数据。有许多的原因我们需
  960. 要导出数据。一个重要的原因是用于备份数据库。数据的造价常常是昂贵的,需要谨慎处理它们。经常地备份可以帮助防止宝贵数据地丢失;另外一
  961. 个原因是,也许您希望导出数据来共享。在这个信息技术不断成长的世界中,共享数据变得越来越常见。
  962.   比方说MacmillanUSA维护护着一个将要出版的书籍的大型数据库。这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快出版。医院
  963. 越来越走向采用无纸病历记录,这样这些病历可以随时跟着你。世界变得越来越小,信息也被共享得越来越多。有很多中导出数据得方法,它们都跟
  964. 导入数据很相似。因为,毕竟,这些都只是一种透视得方式。从数据库导出的数据就是从另一端导入的数据。这里我们并不讨论其他的数据库各种各
  965. 样的导出数据的方法,您将学会如何用MySQL来实现数据导出。
  966.   使用MySQLdump:
  967.   MySQLdump命令位于MySQL/bin/目录中
  968.   MySQLdump工具很多方面类似相反作用的工具MySQLimport。它们有一些同样的选项。但MySQLdump能够做更多的事情。它可以把整个数据库装载到
  969. 一个单独的文本文件中。这个文件包含有所有重建您的数据库所需要的SQL命令。这个命令取得所有的模式(Schema,后面有解释)并且将其转换成
  970. DDL语法(CREATE语句,即数据库定义语句),取得所有的数据,并且从这些数据中创建INSERT语句。这个工具将您的数据库中所有的设计倒转。因为
  971. 所有的东西都被包含到了一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。这个工具令人难以置信地简单
  972. 而快速。决不会有半点让人头疼地地方。
  973.   因此,如果您像装载整个数据库Meet_A_Geek的内容到一个文件中,可以使用下面的命令:
  974.   bin/MySQLdump–pMeet_A_Geek>MeetAGeek_Dump_File.txt
  975.   这个语句也允许您指定一个表进行dump(备份/导出/装载?)。如果您只是希望把数据库Meet_A_Geek中的表Orders中的整个内容导出到一个文件,
  976. 可以使用下面的命令:
  977.   bin/MySQLdump–pMeet_A_GeekOrders>MeetAGeek_Orders.txt
  978.   这个非常的灵活,您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。要达到这样的目的,可以使用类似于下面的命令:
  979.   bin/MySQLdump–p–where="Order_ID>2000"Meet_A_GeekOrders>Special_Dump.txt
  980.   MySQLdump工具有大量的选项,部分选项如下表:
  981.   选项/Option作用/ActionPerformed
  982.   --add-drop-table
  983.   这个选项将会在每一个表的前面加上DROPTABLEIFEXISTS语句,这样可以保证导回MySQL数据库的时候不会出错,因为每次导回的时候,都会
  984. 首先检查表是否存在,存在就删除
  985.   --add-locks
  986.   这个选项会在INSERT语句中捆上一个LOCKTABLE和UNLOCKTABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作
  987.   -cor-complete_insert
  988.   这个选项使得MySQLdump命令给每一个产生INSERT语句加上列(field)的名字。当把数据导出导另外一个数据库时这个选项很有用。
  989.   --delayed-insert在INSERT命令中加入DELAY选项
  990.   -For-flush-logs使用这个选项,在执行导出之前将会刷新MySQL服务器的log.
  991.   -for-force使用这个选项,即使有错误发生,仍然继续导出
  992.   --full这个选项把附加信息也加到CREATETABLE的语句中
  993.   -lor-lock-tables使用这个选项,导出表的时候服务器将会给表加锁。
  994.   -tor-no-create-info
  995.   这个选项使的MySQLdump命令不创建CREATETABLE语句,这个选项在您只需要数据而不需要DDL(数据库定义语句)时很方便。
  996.   -dor-no-data这个选项使的MySQLdump命令不创建INSERT语句。
  997.   在您只需要DDL语句时,可以使用这个选项。
  998.   --opt此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。
  999.   -qor-quick这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。
  1000.   -Tpathor-tab=path这个选项将会创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为
  1001. table_name.sql,数据文件被命名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在,并且命令的使用者有对文件的特权。
  1002.   -w"WHEREClause"or-where="Whereclause"
  1003.   如前面所讲的,您可以使用这一选项来过筛选将要放到导出文件的数据。
  1004.   假定您需要为一个表单中要用到的帐号建立一个文件,经理要看今年(2004年)所有的订单(Orders),它们并不对DDL感兴趣,并且需要文件有
  1005. 逗号分隔,因为这样就很容易导入到Excel中。为了完成这个人物,您可以使用下面的句子:
  1006.   bin/MySQLdump–p–where"Order_Date>='2000-01-01'"
  1007.   –tab=/home/mark–no-create-info–fields-terminated-by=,Meet_A_GeekOrders
  1008.   这将会得到您想要的结果。
  1009.   schema:模式Thesetofstatements,expressedindatadefinitionlanguage,thatcompletelydescribethestructureofadata
  1010. base.
  1011.   一组以数据定义语言来表达的语句集,该语句集完整地描述了数据库的结构。
  1012.   SELECTINTOOUTFILE:
  1013.   如果您觉得MySQLdump工具不够酷,就使用SELECTINTOOUTFILE吧,MySQL同样提供一个跟LOADDATAINFILE命令有相反作用的命令,这就是
  1014. SELECTINTOOUTFILE命令,这两个命令有很多的相似之处。首先,它们有所有的选项几乎相同。现在您需要完成前面用MySQLdump完成的功能,可以
  1015. 依照下面的步骤进行操作:
  1016.   1.确保MySQLd进程(服务)已经在运行
  1017.   2.cd/usr/local/MySQL
  1018.   3.bin/MySQLadminping;//如果这个句子通不过,可以用这个:MySQLadmin-uroot-pping
  1019. MySQLadminping用于检测MySQLd的状态,isalive说明正在运行,出错则可能需要用户名和密码。
  1020.   4.启动MySQL监听程序.
  1021.   5.bin/MySQL–pMeet_A_Geek;//进入MySQL命令行,并且打开数据库Meet_A_Geek,需要输入密码
  1022.   6.在命令行中,输入一下命令:
  1023.   SELECT*INTOOUTFILE'/home/mark/Orders.txt'
  1024.   FIELDS
  1025.   TERMINATEDBY=','
  1026.   FROMOrders
  1027.   WHEREOrder_Date>='2000-01-01'
  1028.   在你按了Return(回车)之后,文件就创建了。这个句子就像一个规则的SELECT语句,只是把想屏幕的输出重定向到了文件中。这意味这您可以
  1029. 使用JOIN来实现多表的高级查询。这个特点也可以被用作一个报表产生器。
  1030.   比方说,您可以组合这一章中讨论的方法来产生一个非常有趣的查询,试试这个:
  1031.   在MySQL目录建立一个名为Report_G.rpt的文本文件,加入下面的行:
  1032.   USEMeet_A_Geek;
  1033.   INSERTINTOCustomers(Customer_ID,Last_Name,First_Name)
  1034.   VALUES(NULL,"Kinnard","Vicky");
  1035.   INSERTINTOCustomers(Customer_ID,Last_Name,First_Name)
  1036.   VALUES(NULL,"Kinnard","Steven");
  1037.   INSERTINTOCustomers(Customer_ID,Last_Name,First_Name)
  1038.   VALUES(NULL,"Brown","Sam");
  1039.   SELECTLast_NameINTOOUTFILE'/home/mark/Report.rpt'
  1040.   FROMCustomersWHERECustomer_ID>1;
  1041.   然后确认MySQL进程在运行,并且您在MySQL目录中,输入下面的命令:
  1042.   bin/MySQL<Report_G.rpt检查您命名作为输出的文件,这个文件将会包含所有您在Customers表中输入的顾客的姓。如您所见,您可以使用今
  1043. 天学到的导入/导出(import/export)的方法来帮助得到报表。查看全文
  1044. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  1045. 关于MSSQL数据库的字段
  1046. 发表人:kendy517|发表时间:2007年二月09日,09:11
  1047. 数据类型是数据的一种属性,表示数据所表示信息的类型。任何一种计算机语言都定义了自己的数据类型。当然,不同的程序语言都具有不同的特点
  1048. ,所定义的数据类型的各类和名称都或多或少有些不同。SQLServer提供了25种数据类型:
  1049.   ·Binary[(n)]
  1050.   ·Varbinary[(n)]
  1051.   ·Char[(n)]
  1052.   ·Varchar[(n)]
  1053.   ·Nchar[(n)]
  1054.   ·Nvarchar[(n)]
  1055.   ·Datetime
  1056.   ·Smalldatetime
  1057.   ·Decimal[(p[,s])]
  1058.   ·Numeric[(p[,s])]
  1059.   ·Float[(n)]
  1060.   ·Real
  1061.   ·Int
  1062.   ·Smallint
  1063.   ·Tinyint
  1064.   ·Money
  1065.   ·Smallmoney
  1066.   ·Bit
  1067.   ·Cursor
  1068.   ·Sysname
  1069.   ·Timestamp
  1070.   ·Uniqueidentifier
  1071.   ·Text
  1072.   ·Image
  1073.   ·Ntext
  1074. (1)二进制数据类型
  1075.   二进制数据包括Binary、Varbinary和Image
  1076.   Binary数据类型既可以是固定长度的(Binary),也可以是变长度的。
  1077.   Binary[(n)]是n位固定的二进制数据。其中,n的取值范围是从1到8000。其存储窨的大小是n+4个字节。
  1078.   Varbinary[(n)]是n位变长度的二进制数据。其中,n的取值范围是从1到8000。其存储窨的大小是n+4个字节,不是n个字节。
  1079.   在Image数据类型中存储的数据是以位字符串存储的,不是由SQLServer解释的,必须由应用程序来解释。例如,应用程序可以使用BMP、TIEF、
  1080. GIF和JPEG格式把数据存储在Image数据类型中。
  1081. (2)字符数据类型
  1082.   字符数据的类型包括Char,Varchar和Text
  1083.   字符数据是由任何字母、符号和数字任意组合而成的数据。
  1084.   Varchar是变长字符数据,其长度不超过8KB。Char是定长字符数据,其长度最多为8KB。超过8KB的ASCII数据可以使用Text数据类型存储。例如
  1085. ,因为Html文档全部都是ASCII字符,并且在一般情况下长度超过8KB,所以这些文档可以Text数据类型存储在SQLServer中。
  1086. (3)Unicode数据类型
  1087.   Unicode数据类型包括Nchar,Nvarchar和Ntext
  1088.   在MicrosoftSQLServer中,传统的非Unicode数据类型允许使用由特定字符集定义的字符。在SQLServer安装过程中,允许选择一种字符集。使用
  1089. Unicode数据类型,列中可以存储任何由Unicode标准定义的字符。在Unicode标准中,包括了以各种字符集定义的全部字符。使用Unicode数据类型,
  1090. 所战胜的窨是使用非Unicode数据类型所占用的窨大小的两倍。
  1091.   在SQLServer中,Unicode数据以Nchar、Nvarchar和Ntext数据类型存储。使用这种字符类型存储的列可以存储多个字符集中的字符。当列的长度
  1092. 变化时,应该使用Nvarchar字符类型,这时最多可以存储4000个字符。当列的长度固定不变时,应该使用Nchar字符类型,同样,这时最多可以存储
  1093. 4000个字符。当使用Ntext数据类型时,该列可以存储多于4000个字符。
  1094. (4)日期和时间数据类型
  1095.   日期和时间数据类型包括Datetime和Smalldatetime两种类型
  1096.   日期和时间数据类型由有效的日期和时间组成。例如,有效的日期和时间数据包括“4/01/9812:15:00:00:00PM”和“1:28:29:15:01AM8/17/98
  1097. ”。前一个数据类型是日期在前,时间在后一个数据类型是霎时间在前,日期在后。在MicrosoftSQLServer中,日期和时间数据类型包括Datetime和
  1098. Smalldatetime两种类型时,所存储的日期范围是从1753年1月1日开始,到9999年12月31日结束(每一个值要求8个存储字节)。使用Smalldatetime数
  1099. 据类型时,所存储的日期范围是1900年1月1日开始,到2079年12月31日结束(每一个值要求4个存储字节)。
  1100.   日期的格式可以设定。设置日期格式的命令如下:
  1101.   SetDateFormat{format|@format_var|
  1102.   其中,format|@format_var是日期的顺序。有效的参数包括MDY、DMY、YMD、YDM、MYD和DYM。在默认情况下,日期格式为MDY。
  1103.   例如,当执行SetDateFormatYMD之后,日期的格式为年月日形式;当执行SetDateFormatDMY之后,日期的格式为日月有年形式
  1104. (5)数字数据类型
  1105.   数字数据只包含数字。数字数据类型包括正数和负数、小数(浮点数)和整数
  1106.   整数由正整数和负整数组成,例如39、25、0-2和33967。在MicrsoftSQLServer中,整数存储的数据类型是  Int,Smallint和Tinyint。Int数
  1107. 据类型存储数据的范围大于Smallint数据类型存储数据的范围,而Smallint据类型存储数据的范围大于Tinyint数据类型存储数据的范围。使用Int数
  1108. 据狗昔存储数据的范围是从-2147483648到2147483647(每一个值要求4个字节存储空间)。使用Smallint数据类型时,存储数据的范围从-32768到
  1109. 32767(每一个值要求2个字节存储空间)。使用Tinyint数据类型时,存储数据的范围是从0到255(每一个值要求1个字节存储空间)。
  1110.   精确小娄数据在SQLServer中的数据类型是Decimal和Numeric。这种数据所占的存储空间根据该数据的位数后的位数来确定。
  1111.   在SQLServer中,近似小数数据的数据类型是Float和Real。例如,三分之一这个分数记作。3333333,当使用近似数据类型时能准确表示。因此,
  1112. 从系统中检索到的数据可能与存储在该列中数据不完全一样。
  1113. (6)货币数据表示正的或者负的货币数量。
  1114.   在MicrosoftSQLServer中,货币数据的数据类型是Money和Smallmoney
  1115.   Money数据类型要求8个存储字节,Smallmoney数据类型要求4个存储字节。
  1116. (7)特殊数据类型
  1117.   特殊数据类型包括前面没有提过的数据类型。特殊的数据类型有3种,即  Timestamp、Bit和Uniqueidentifier。
  1118.   Timestamp用于表示SQLServer活动的先后顺序,以二进投影的格式表示。Timestamp数据与插入数据或者日期和时间没有关系。
  1119.   Bit由1或者0组成。当表示真或者假、ON或者OFF时,使用Bit数据类型。例如,询问是否是每一次访问的客户机请求可以存储在这种数据类型的列
  1120. 中。
  1121.   Uniqueidentifier由16字节的十六进制数字组成,表示一个全局唯一的。当表的记录行要求唯一时,GUID是非常有用。例如,在客户标识号列使
  1122. 用这种数据类型可以区别不同的客户。
  1123. 2.用户定义的数据类型
  1124.   用户定义的数据类型基于在MicrosoftSQLServer中提供的数据类型。当几个表中必须存储同一种数据类型时,并且为保证这些列有相同的数据类
  1125. 型、长度和可空性时,可以使用用户定义的数据类型。例如,可定义一种称为  postal_code的数据类型,它基于Char数据类型。
  1126.   当创建用户定义的数据类型时,必须提供三个数:数据类型的名称、所基于的系统数据类型和数据类型的可空性。
  1127. (1)创建用户定义的数据类型
  1128.   创建用户定义的数据类型可以使用Transact-SQL语句。系统存储过程sp_addtype可以来创建用户定义的数据类型。其语法形式如下:
  1129.   sp_addtype{type},[,system_data_bype][,'null_type']
  1130.   其中,type是用户定义的数据类型的名称。system_data_type是系统提供的数据类型,例如Decimal、Int、Char  等等。null_type表示该数据
  1131. 类型是如何处理空值的,必须使用单引号引起来,例如'NULL''NOTNULL'或者'NONULL'
  1132.   例子:
  1133.   Usecust
  1134.   Execsp_addtypessn,'Varchar(11)',"NotNull'
  1135.   创建一个用户定义的数据类型ssn,其基于的系统数据类型是变长为11的字符,不允许空。
  1136.   例子:
  1137.   Usecust
  1138.   Execsp_addtypebirthday,datetime,'Null'
  1139.   创建一个用户定义的数据类型birthday,其基于的系统数据类型是DateTime,允许空。
  1140.   例子:
  1141.   Usemaster
  1142.   Execsp_addtypetelephone,'varchar(24),'NotNull'
  1143.   Eexcsp_addtypefax,'varchar(24)','Null'
  1144.   创建两个数据类型,即telephone和fax
  1145. (2)删除用户定义的数据类型
  1146.   当用户定义的数据类型不需要时,可删除。删除用户定义的数据类型的命令是sp_droptype{'type'}。
  1147.   例子:
  1148.   Usemaster
  1149.   Execsp_droptype'ssn'
  1150.   注意:当表中的列还正在使用用户定义的数据类型时,或者在其上面还绑定有默认或者规则时,这种用户定义的数据类型不能删除。
  1151. SQLSERVER的字段类型说明
  1152. 以下为SQLSERVER7.0以上版本的字段类型说明。SQLSERVER6.5的字段类型说明请参考SQLSERVER提供的说明。
  1153.   
  1154. 字段类型
  1155. 描述
  1156. bit0或1的整型数字
  1157. int从-2^31(-2,147,483,648)到2^31(2,147,483,647)的整型数字
  1158. smallint从-2^15(-32,768)到2^15(32,767)的整型数字
  1159. tinyint从0到255的整型数字
  1160. decimal从-10^38到10^38-1的定精度与有效位数的数字
  1161. numericdecimal的同义词
  1162. money从-2^63(-922,337,203,685,477.5808)到2^63-1(922,337,203,685,477.5807)的货币数据,最小货币单位千分之十
  1163. smallmoney从-214,748.3648到214,748.3647的货币数据,最小货币单位千分之十
  1164. float从-1.79E+308到1.79E+308可变精度的数字
  1165. real从-3.04E+38到3.04E+38可变精度的数字
  1166. datetime从1753年1月1日到9999年12日31的日期和时间数据,最小时间单位为百分之三秒或3.33毫秒
  1167. smalldatetime从1900年1月1日到2079年6月6日的日期和时间数据,最小时间单位为分钟
  1168. timestamp时间戳,一个数据库宽度的唯一数字
  1169. uniqueidentifier全球唯一标识符GUID
  1170. char定长非Unicode的字符型数据,最大长度为8000
  1171. varchar变长非Unicode的字符型数据,最大长度为8000
  1172. text变长非Unicode的字符型数据,最大长度为2^31-1(2G)
  1173. nchar定长Unicode的字符型数据,最大长度为8000
  1174. nvarchar变长Unicode的字符型数据,最大长度为8000
  1175. ntext变长Unicode的字符型数据,最大长度为2^31-1(2G)
  1176. binary定长二进制数据,最大长度为8000
  1177. varbinary变长二进制数据,最大长度为8000
  1178. image变长二进制数据,最大长度为2^31-1(2G)
  1179. [down=upload/images/618fmall2.rar]DOWNLOADTHEFILE[/down]
  1180. 天气:大雨,ccdot发表于2006-6-2014:44:36,阅读了655次,共有个2回复.
  1181. --语句              功能
  1182. --数据操作
  1183. SELECT   --从数据库表中检索数据行和列
  1184. INSERT   --向数据库表添加新数据行
  1185. DELETE   --从数据库表中删除数据行
  1186. UPDATE   --更新数据库表中的数据
  1187. --数据定义
  1188. CREATETABLE  --创建一个数据库表
  1189. DROPTABLE  --从数据库中删除表
  1190. ALTERTABLE  --修改数据库表结构
  1191. CREATEVIEW  --创建一个视图
  1192. DROPVIEW  --从数据库中删除视图
  1193. CREATEINDEX  --为数据库表创建一个索引
  1194. DROPINDEX  --从数据库中删除索引
  1195. CREATEPROCEDURE --创建一个存储过程
  1196. DROPPROCEDURE  --从数据库中删除存储过程
  1197. CREATETRIGGER  --创建一个触发器
  1198. DROPTRIGGER  --从数据库中删除触发器
  1199. CREATESCHEMA  --向数据库添加一个新模式
  1200. DROPSCHEMA  --从数据库中删除一个模式
  1201. CREATEDOMAIN  --创建一个数据值域
  1202. ALTERDOMAIN  --改变域定义
  1203. DROPDOMAIN  --从数据库中删除一个域
  1204. --数据控制
  1205. GRANT   --授予用户访问权限
  1206. DENY   --拒绝用户访问
  1207. REVOKE   --解除用户访问权限
  1208. --事务控制
  1209. COMMIT   --结束当前事务
  1210. ROLLBACK  --中止当前事务
  1211. SETTRANSACTION  --定义当前事务数据访问特征
  1212. --程序化SQL
  1213. DECLARE   --为查询设定游标
  1214. EXPLAN   --为查询描述数据访问计划
  1215. OPEN   --检索查询结果打开一个游标
  1216. FETCH   --检索一行查询结果
  1217. CLOSE   --关闭游标
  1218. PREPARE   --为动态执行准备SQL语句
  1219. EXECUTE   --动态地执行SQL语句
  1220. DESCRIBE  --描述准备好的查询
  1221. ---局部变量
  1222. declare@idchar(10)
  1223. --set@id=’10010001’
  1224. select@id=’10010001’
  1225. ---全局变量
  1226. ---必须以@@开头
  1227. 查看全文
  1228. 分类:(一般分类)::评论(0)::静态链接网址::引用(0)
  1229. 配置Apache服务器,设置DNS
  1230. 发表人:kendy517|发表时间:2007年二月07日,16:16
  1231. 当然主要有技术含量的是点DNS的解析,我正给我们公司负责,先查资料的说...‘
  1232. 我们通常所说的虚拟主机技术就是将一台(或者一组)服务器的资源(系统资源、网络带宽、存储空间等)按照一定的比例分割成若干台相对独立的
  1233. “小主机”的技术。每一台这样的“小主机”在功能上都可以实现WWW、FTP、Mail等基本的Internet服务,就像使用独立的主机一样。
  1234.  
  1235. 目前网站服务器的虚拟主机平台使用以开放的Apache为最多,其次是微软的WindowsIIS。Apache具有跨平台
  1236. (FreeBSD/Linux/Windows/Solaris/OtherUNIX)、易于维护与最佳安全性等优点。
  1237. Apache是率先支持基于IP虚拟主机的服务器之一。Apache1.1及其更新版本同时支持基于IP和基于主机名的虚拟主机,不同的虚拟主机有时会被称为
  1238. 基于主机(host-based)或非IP虚拟主机(non-IPvirtualhosts)。
  1239. 用Apache设置虚拟主机服务通常可以采用两种方案:基于IP地址的虚拟主机和基于主机名字的虚拟主机,下面我们分别介绍一下它们的实现方法以及
  1240. 优缺点。以便大家在具体的应用中能够选择最合适的实现方法。
  1241. 一、Apache实现基于IP地址的虚拟主机(每个站点拥有一个独立IP地址)
  1242. 使用这种虚拟主机方式,首先要在服务器上为每个虚拟主机单独设置一个IP地址。这些IP地址可以通过增加多个网卡或者在一个网卡上设立多个IP地
  1243. 址来完成。有了多个IP地址后,可以采用以下两种方式之一来设置Apache。
  1244. 1、为每个虚拟主机运行一份Apache
  1245. 采用这种方式,每一份Apache程序可以以单独的用户运行,因此各个虚拟主机之间互不影响。设置这种虚拟主机时,只要为每一份Apache设置一套配
  1246. 置文件就可以了,唯一需要注意的是:必须使用“Listen”语句,强制每一份Apache仅仅在属于“自己”的IP地址上接收服务请求。
  1247. 优点:各个虚拟主机之间互不干扰,安全性高。
  1248. 缺点:占用系统资源较多。
  1249. 2、多个虚拟主机共享同一份Apache
  1250. 采用这种方式,各个虚拟主机共享同一份Apache,因此各个虚拟主机之间有一定的影响,尤其是执行CGI程序时,可能会带来一些严重的安全问题。设
  1251. 置这种虚拟主机时,只要为每一个虚拟主机设置类似如下的信息即可:
  1252. <VirtualHostwww.ghq1.com>
  1253. DocumentRoot/www/ghq1
  1254. </VirrualHost>
  1255. 优点:占用系统资源比上一种方式少。
  1256. 缺点:安全性低,每个虚拟主机仍然需要占用一个IP地址。
  1257. 例如服务器一个网卡上绑定有两个IP地址(172.16.3.40和172.16.3.50)分别对应域名www.ghq1.com和www.ghq2.org的服务,配置如下:
  1258. 服务器配置(apache的配置文件httpd.conf)
  1259. Listen80
  1260. <VirtualHost172.16.3.40>
  1261. DocumentRoot/www/ghq1
  1262. ServerNamewww.ghq1.com
  1263. </VirtualHost>
  1264. <VirtualHost172.16.3.50>
  1265. DocumentRoot/www/ghq2
  1266. ServerNamewww.ghq2.org
  1267. </VirtualHost>
  1268. 配置简单说明:“Listen”默认httpd服务会监控第80号通信端口,“Listen”选项让用户自行指定apache服务器监控的IP地址或通信端口。
  1269. “DocumentRoot”:指定apache服务器存放网页的根目录;“ServerName”:允许用户自行设置主机名,这个名称将被送到远程连接程序,以取代安
  1270. 装apache服务器主机的真实名称。<VirtualHostIP>和</VirtualHost>构成虚拟主机的语法结构,其中的IP就是我们在服务器上绑定的不同的IP地
  1271. 址,也可以是IP地址加上通信端口号(见下面的例子)。
  1272. 如果服务器有两个IP地址(172.16.3.40和172.16.3.50)分别对应域名www.ghq1.com和www.ghq2.org。对每个域名,我们都希望在80端口和8080端
  1273. 口发布我们的网站。可以这样配置:
  1274. 服务器配置(apache的配置文件httpd.conf)
  1275. Listen172.16.3.40:80
  1276. Listen172.16.3.40:8080
  1277. Listen172.16.3.50:80
  1278. Listen172.16.3.50:8080
  1279. <VirtualHost172.16.3.40:80>
  1280. DocumentRoot/www/ghq1-80
  1281. ServerNamewww.ghq1.com
  1282. </VirtualHost>
  1283. <VirtualHost172.16.3.40:8080>
  1284. DocumentRoot/www/ghq1-8080
  1285. ServerNamewww.ghq1.com
  1286. </VirtualHost>
  1287. <VirtualHost172.16.3.50:80>
  1288. DocumentRoot/www/ghq2-80
  1289. ServerNamewww.ghq1.org
  1290. </VirtualHost>
  1291. <VirtualHost172.16.3.50:8080>
  1292. DocumentRoot/www/ghq2-8080
  1293. ServerNamewww.ghq2.org
  1294. </VirtualHost>
  1295. 因此,建立虚拟主机,我们要做好不同的IP对应的域名解析工作,建立相应的目录(如/www/ghq1),将相应的主页内容存放在相应的目录中即可。
  1296. 二、Apache实现基于主机名的虚拟主机服务(一个IP地址实现多个网站)
  1297. 基于主机名字的虚拟主机服务,是目前虚拟主机比较常用的一种方案。因为它不需要更多的IP地址,无须什么特殊的软硬件支持。而且现在的浏览器
  1298. 大都支持这种虚拟主机的实现方法。基于域名的的虚拟主机是根据客户端提交的HTTP头中的关于主机名的部分决定的。使用这种技术,很多虚拟主机
  1299. 可以享用同一个IP地址。
  1300. 基于域名的虚拟主机相对比较简单,因为我们只需要配置DNS服务器将每个主机名映射(CNAMES)到正确的IP地址,然后配置ApacheHTTP服务器,令
  1301. 其辨识不同的主机名就可以了。基于域名的服务器也可以缓解IP地址(IPV4)不足的问题。这种方式下,各个虚拟主机共享同一份Apache,因此有
  1302. CGI程序运行时,安全性也不高。
  1303. 优点:只要一个IP地址就可以提供大量的虚拟主机服务。
  1304. 缺点:安全性差。维护这些虚拟主机时需要更改配置文件,并且需要重新启动Apache进程才能起作用。因此不适合进行大规模的虚拟主机服务。
  1305. 如果服务器只有一个IP地址,而在DNS中有很多映射到这个机器。我们想要在这个机器上运行www.ghq1.com和www.ghq2.org两个站点。在Apache服务
  1306. 器的配置中创建一个虚拟主机并不会自动在DNS中对主机名做相应更新。我们必须自己在DNS中添加域名来指向我们的IP地址。否则别人是无法看到我
  1307. 们的web站点。
  1308. 服务器配置(apache的配置文件httpd.conf)
  1309. #EnsurethatApachelistensonport80
  1310. Listen80
  1311. #ListenforvirtualhostrequestsonallIPaddresses
  1312. NameVirtualHost*
  1313. <VirtualHost*>
  1314. DocumentRoot/www/ghq1
  1315. ServerNamewww.ghq1.com
  1316. #Otherdirectiveshere
  1317. </VirtualHost>
  1318. <VirtualHost*>
  1319. DocumentRoot/www/ghq2
  1320. ServerNamewww.ghq2.org
  1321. #Otherdirectiveshere
  1322. </VirtualHost>
  1323. 因为*(星号)匹配所有的地址,所以主服务器不接收任何请求。因为www.ghq1.com首先出现在配置文件中,所以它拥有最高优先级,可以认为是默
  1324. 认或首要服务器。这意味着如果一个接受的请求不能与某个ServerName指令相匹配,它将会由第一个VirtualHost所伺服。
  1325. 当我们的IP地址无法确定的时候,使用*是很方便的--比如说,ISP给我们配置的是动态IP地址(如ADSL拨号上网),而我们有使用了某种动态域名解
  1326. 析系统时。因为*匹配任何IP地址,所以在这样的情况下,不论IP地址如何变化,我们都不需要另外进行配置。上述配置就是我们在绝大多数情况下
  1327. 使用基于域名的虚拟主机时将要用到的。
  1328. 关于DNS和Apache
  1329. 本文档的涵义一言以蔽之就是:不要让Apache在解析配置文件的时候用到DNS。如果Apache在解析配置文件时用到了DNS,您的服务器就会发生可靠性
  1330. 的问题(也可能根本无法启动),或者遭致拒绝(偷窃)服务攻击(包括用户可以从其他用户那里偷窃点击)。
  1331. 一个简单示例
  1332. 拒绝服务
  1333. "mainserver"地址
  1334. 避免这些问题的小技巧
  1335. 附录:进一步的提示
  1336. 一个简单示例
  1337. <VirtualHostwww.abc.dom>
  1338. ServerAdminwebgirl@abc.dom
  1339. DocumentRoot/www/abc
  1340. </VirtualHost>
  1341. 为了让Apache功能正常,一个虚拟主机绝对需要以下两部分的信息:ServerName和与服务器对应的至少一个IP地址。这个示例没有包括IP地址,于是
  1342. Apache必须用DNS来查询www.abc.dom的地址。如果在某些不可预料的情况下,当您的服务器解析配置文件时没有得到DNS的支持,那么这个虚拟主机
  1343. 将不会被配置。它将不会对任何请求作出反应。(在Apache的1.2版本之前,服务器甚至无法启动)。
  1344. 假设www.abc.dom的IP地址是10.0.0.1。那么看看以下这个配置片断:
  1345. <VirtualHost10.0.0.1>
  1346. ServerAdminwebgirl@abc.dom
  1347. DocumentRoot/www/abc
  1348. </VirtualHost>
  1349. 现在Apache需要DNS对这个虚拟主机进行反向域名解析来确定ServerName。如果反向解析失败,那么这将导致这个虚拟主机部分功能丧失。(在
  1350. Apache的1.2版本之前,服务器将不能启动)。如果虚拟主机是基于域名的,它将完全不能使用,但如果它是基于IP的,那么它将很有可能工作。然而
  1351. ,如果Apache不得不为一个已经包含了服务器域名的服务器产生一个完整的URL,那么它将可能产生一个无效的URL。
  1352. 以下是一个可以避免上述两个问题的配置片断.
  1353. <VirtualHost10.0.0.1>
  1354. ServerNamewww.abc.dom
  1355. ServerAdminwebgirl@abc.dom
  1356. DocumentRoot/www/abc
  1357. </VirtualHost>
  1358. 拒绝服务
  1359. 拒绝服务主要由(至少)两种形式导致。如果您在运行Apache1.2以前的版本,在上述两种情况下,如果您的任何一个虚拟主机的DNS解析失败,您都
  1360. 会无法启动服务。在一些情况下,DNS解析甚至不在您的控制范围之内。比如说,如果abc.dom是您的一个客户,而且他们自己控制着DNS。那么仅仅
  1361. 是因为他们删除了www.abc.dom这个记录,都会导致您的服务器(1.2之前的版本)无法启动。
  1362. 另外一种形式就更隐蔽了。比如说下面这个配置片断:
  1363. <VirtualHostwww.abc.dom>
  1364. ServerAdminwebgirl@abc.dom
  1365. DocumentRoot/www/abc
  1366. </VirtualHost>
  1367. <VirtualHostwww.def.dom>
  1368. ServerAdminwebguy@def.dom
  1369. DocumentRoot/www/def
  1370. </VirtualHost>
  1371. 假设您已经为www.abc.dom设定了10.0.0.1,而为www.def.dom设定了10.0.0.2。更进一步,假设def.com自己控制DNS。在这种配置下,您已经把
  1372. def.com放到了一个可以将所有指向abc.com的所有流量据为己有的情况之下。为了达到这样的目的,他们只需要把www.def.dom的地址解析设置成
  1373. 10.0.0.1就可以了。因为他们控制着自己的DNS服务,所以您无法阻止他们把www.def.com这个记录指向任何一个IP地址。
  1374. 然后,所有向10.0.0.1发出的请求(包括用户所有类似http://www.abc.dom/任何字符的URL)都将会为def.com这个虚拟主机所接收。为了更好的理
  1375. 解着一切是怎样发生的,您需要一个关于Apache是怎样将进入的请求分配给它的虚拟主机的深入说明。您可以在这里发现一个完整的文档。
  1376. "mainserver"地址
  1377. 在Apache1.1中,基于域名的虚拟主机支持需要Apache知道运行着httpd的主机的IP地址。一般来说可以用全局变量ServerName(如果存在)或者调用
  1378. C的方法gethostname(与在命令行模式下键入hostname得到的返回值一样)。接着它就会利用DNS来查找这个地址。目前还没有办法避免这样的查找。
  1379. 如果您担心这样的查找会因为您的DNS服务器没有启动而遭到失败的结果,您就可以在/etc/hosts中插入一条记录来确定主机名(此文件中应该已经
  1380. 存在这条记录了,否则您的机器无法正常启动)。然后,您要确认您的机器已经配置为当DNS解析失败的情况下,它将会使用/etc/hosts根据所使用的
  1381. 操作系统不同,您可能需要在/etc/resolv.conf或/etc/nsswitch.conf两个文件中选择一个进行编辑。
  1382. 如果您的服务器不必因为其他理由而使用DNS,您也许不必在把HOSTRESORDER环境变量设置为"local"的情况下运行Apache。这都取决于您所使用的操
  1383. 作系统和解析库。如果您没有使用mod_env来控制环境变量,它还将影响到CGI。强烈建议您参考一下您所使用的操作系统附带的man帮助或FAQ。
  1384. 避免这些问题的小技巧
  1385. 在VirtualHost中使用IP地址
  1386. 在Listen中使用IP地址
  1387. 确保所有的虚拟主机拥有显式的ServerName定义。
  1388. 创建一个不包含任何服务页面的<VirtualHost_default_:*>服务器
  1389. 附录:进一步的提示
  1390. 涉及到DNS的情况都很让人不舒服。在Apache1.2中,我们努力想让服务器在DNS解析失败的情况下至少保持能够启动,但可能我们还是没能做到最
  1391. 好。在当今重编号成了必须的Internet上面,在配置文件中显式的写明IP地址已经成为不合时宜的行为了。
  1392. 上述攻击的解决办法是,在一个正向的DNS查询结果后部署一个逆向DNS解析并将两个域名进行比较。如果不同,就禁用相应的虚拟主机。这个
  1393. 方法需要一个正确配置了的逆向域名解析服务器(因为FTP服务器和TCP封装进行的“双重逆向”DNS处理的普遍应用,这已为大部分管理员所熟知了)
  1394. 在某些情况下,如果没有使用IP地址而DNS解析又失败了,那么正常启动一个基于域名的虚拟主机看来是不可能的。一些诸如禁用部分配置文件这样
  1395. 的权宜之计会带来比根本不能启动更遭的不可预测的结果。
  1396. 随着HTTP/1.1的部署以及浏览器和代理服务器开始支持Host头,我们完全避免使用基于IP的虚拟主机也逐渐成为可能。这种状况下,web服务器也不
  1397. 必在配置时进行DNS的查询。但在1997年3月,这些特性的采用还没有广泛到可以在重要的web服务器应用的地步。
  1398. http://www.uplinux.com/download/doc/apache/ApacheManual/dns-caveats.html#example
  1399. http://www.uplinux.com/download/doc/apache/ApacheManual/mod/core.html#virtualhost
  1400. <VirtualHost>和</VirtualHost>用于封装一组仅施用于特定虚拟主机的指令。任何在虚拟主机配置中可以使用的指令也同样可以在这里使用。当服务
  1401. 器接受了一个特定虚拟主机的文档请求时,它会使用封装在<VirtualHost>配置段中的指令。地址可以是
  1402. 虚拟主机的IP地址;
  1403. 虚拟主机IP地址对应的完整域名;
  1404. 字符*,仅与NameVirtualHost*配合使用以匹配所有的IP地址;或是
  1405. 字符串_default_,与基于IP的虚拟主机联用以捕获所有没有匹配的IP地址。
  1406. 示例
  1407. <VirtualHost10.1.2.3>
  1408. ServerAdminwebmaster@host.foo.com
  1409. DocumentRoot/www/docs/host.foo.com
  1410. ServerNamehost.foo.com
  1411. ErrorLoglogs/host.foo.com-error_log
  1412. TransferLoglogs/host.foo.com-access_log
  1413. </VirtualHost>
  1414. IPv6的地址必须放入方括号中指定,否则作为可选项的端口号将无法确定。一个IPv6的示例如下:
  1415. <VirtualHost[fe80::a00:20ff:fea7:ccea]>
  1416. ServerAdminwebmaster@host.foo.com
  1417. DocumentRoot/www/docs/host.foo.com
  1418. ServerNamehost.foo.com
  1419. ErrorLoglogs/host.foo.com-error_log
  1420. TransferLoglogs/host.foo.com-access_log
  1421. </VirtualHost>
  1422. 每个虚拟主机必须对应不同的IP地址、端口号或是不同的主机名。在第一种情况下,服务器所在物理机器必须配置为可以为多个地址接受IP包。(在
  1423. 机器没有多个网络硬件界面的情况下,如果您的操作系统支持,您可以使用ifconfigalias命令来达到这个目的。)。
  1424. 当使用基于IP的虚拟主机时,特殊的名称_default_可以在没有匹配上其它列出的虚拟主机的情况下作为匹配任何IP地址的虚拟主机。在没有进行
  1425. _default_虚拟主机的设定时,在没有IP与请求匹配的情况下,将使用“主服务器”(包括所有在虚拟主机配置段之外的配置)的配置。(但请注意:
  1426. 任何匹配NameVirtualHost指令的IP地址既不会使用"main"服务器配置,也不会使用_default_虚拟主机的配置。参阅基于域名的虚拟主机文档获得更
  1427. 多详情。)
  1428. 您可以指定一个:端口来改变匹配的端口。如果没有指定,它将沿用主服务器中离它最近的那个Listen语句指定的值。您也可以指定:*来匹配那个地
  1429. 址上的所有端口。(当您使用_default_时,这是推荐采用的方法。)
  1430. 安全提示:参阅安全提示文档获得为什么当您存储日志文件的目录对于启动服务器以外的用户来说是可写的会危及服务器安全的详细资料。
  1431. 注意:<VirtualHost>的使用不会影响到Apache侦听的地址。您也许需要使用Listen来确保Apache侦听着正确的地址。
  1432. 本文有经典论坛剑气凌人收集整理
  1433. 为调试程序,本机安装iis与apache,无法同时使用80端口,现给出解决方法:
  1434. 方法一:
  1435. IIS5,多IP下共存,IIS为192.168.0.1,apache为192.168.0.2原文地址
  1436. c:InetpubAdminscripts
  1437. cscriptadsutil.vbssetw3svc/disablesocketpoolingtrue
  1438. 该命令反馈如下disablesocketpooling:(BOOLEAN)True
  1439. 重启IIS
  1440. InetpubAdminScripts>cscriptadsutil.vbssetw3svc/disablesocketpoolingtrue
  1441. 由于DisableSocketPooling在IIS6.0元数据库架构(MBSchema.xml)中被定义为有效属性,所以,您仍然可以使用Adsutil.vbs设置该属性,
  1442. 但这种设置不起作用。IIS6.0中的功能是新增的核心级别驱动程序HTTP.sys的一部分。要配置HTTP.sys,您必须使用Httpcfg.exe
  1443. 方法二:
  1444. IIS6,多IP下共存,IIS为192.168.0.1,apache为192.168.0.2原文地址
  1445. 到2003的CD下的support/tools/Support.cab。解压出httpcfg.exe文件,COPY到windows/system32/目录下,用法自己看帮助
  1446. 命令行
  1447. 绑定到某IP:httpcfgsetiplisten-i192.168.0.1
  1448. 即命令使用IIS的只监听指定的IP及端口
  1449. 查看绑定:httpcfgqueryiplisten
  1450. 删除绑定:httpcfgdeleteiplisten-i192.168.0.1
  1451. 命令行
  1452. netstopApache2
  1453. netstopiisadmin/y
  1454. netSTARTApache2
  1455. netSTARTw3svc
  1456. 保证iis下的ip设置为全局默认,Apache中httpconf设置listen192.168.0.2:80,就应该可以两个服务同时运行,相互不冲突了。
  1457. IIS的访问地址为http://192.168.0.1,Apache访问地址为http://192.168.0.2
  1458. 方法三:
  1459. 网上常用的单IP共用80端口方法,不过不推荐,只是使用Apache的代理,速度有影响将apache设为使用80端口,IIS使用其它端口,比如81,然后将
  1460. apache作为IIS的代理。
  1461. 在httpd.conf里面,取消下面四行的注释:
  1462. LoadModuleproxy_modulemodules/mod_proxy.so
  1463. LoadModuleproxy_connect_modulemodules/mod_proxy_connect.so
  1464. LoadModuleproxy_http_modulemodules/mod_proxy_http.so
  1465. LoadModuleproxy_ftp_modulemodules/mod_proxy_ftp.so
  1466. 然后建立一个虚拟主机,将该域名的所有访问转向81端口。
  1467. ServerNameiloves.vicp.net
  1468. ProxyPass/http://localhost:81/
  1469. ProxyPassReverse/http://localhost:81/
  1470. 这样,对外就可以只需要一个端口,即可同时使用apache和IIS的功能了
  1471. 类推,使用第二种方法,你可以在IIS上配置PHP4,Apache2中配置PHP5,只需要IIS中安装PHP4,把php.ini复制到windows目录即可,这个就不用说了
  1472. 吧,Apache2中,只要把PHP5的php.ini放在PHP5安装目录里面就行了
  1473. 配置Apache以支持PHP5:
  1474. LoadModulephp5_module"D:/PHPServer/PHP5/php5apache2.dll"
  1475. AddTypeapplication/x-httpd-php.php
  1476. DirectoryIndexindex.htmlindex.php
  1477. PHPIniDir"D:/PHPServer/PHP5"
  1478. 其中最重要的一条就是PHPIniDir,用来指明php.ini文件所在位置,即PHP5的安装目录,注意所有目录的应该改为D:/PHPServer/PHP5这种格式,而
  1479. 非D:PHPServerPHP5,IIS的访问地址为http://192.168.0.1,Apache访问地址为http://192.168.0.2
  1480. 分类:(计算机网络)::评论(0)::静态链接网址::引用(0)
  1481. MSSQL常用汇总
  1482. 发表人:kendy517|发表时间:2007年二月07日,16:14
  1483. 下列语句部分是Mssql语句,不可以在access中使用。
  1484. SQL分类:
  1485. DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
  1486. DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
  1487. DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
  1488. 首先,简要介绍基础语句:
  1489. 1、说明:创建数据库
  1490. CREATEDATABASEdatabase-name
  1491. 2、说明:删除数据库
  1492. dropdatabasedbname
  1493. 3、说明:备份sqlserver
  1494. ---创建备份数据的device
  1495. USEmaster
  1496. EXECsp_addumpdevice'disk','testBack','c:mssql7backupMyNwind_1.dat'
  1497. ---开始备份
  1498. BACKUPDATABASEpubsTOtestBack
  1499. 4、说明:创建新表
  1500. createtabletabname(col1type1[notnull][primarykey],col2type2[notnull],..)
  1501. 根据已有的表创建新表:
  1502. A:createtabletab_newliketab_old(使用旧表创建新表)
  1503. B:createtabletab_newasselectcol1,col2…fromtab_olddefinitiononly
  1504. 5、说明:删除新表droptabletabname
  1505. 6、说明:增加一个列
  1506. Altertabletabnameaddcolumncoltype
  1507. 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
  1508. 7、说明:添加主键:Altertabletabnameaddprimarykey(col)
  1509. 说明:删除主键:Altertabletabnamedropprimarykey(col)
  1510. 8、说明:创建索引:create[unique]indexidxnameontabname(col….)
  1511. 删除索引:dropindexidxname
  1512. 注:索引是不可更改的,想更改必须删除重新建。
  1513. 9、说明:创建视图:createviewviewnameasselectstatement
  1514. 删除视图:dropviewviewname
  1515. 10、说明:几个简单的基本的sql语句
  1516. 选择:select*fromtable1where范围
  1517. 插入:insertintotable1(field1,field2)values(value1,value2)
  1518. 删除:deletefromtable1where范围
  1519. 更新:updatetable1setfield1=value1where范围
  1520. 查找:select*fromtable1wherefield1like’%value1%’---like的语法很精妙,查资料!
  1521. 排序:select*fromtable1orderbyfield1,field2[desc]
  1522. 总数:selectcount(*)astotalcountfromtable1
  1523. 求和:selectsum(field1)assumvaluefromtable1
  1524. 平均:selectavg(field1)asavgvaluefromtable1
  1525. 最大:selectmax(field1)asmaxvaluefromtable1
  1526. 最小:selectmin(field1)asminvaluefromtable1
  1527. 11、说明:几个高级查询运算词
  1528. A:UNION运算符
  1529. UNION运算符通过组合其他两个结果表(例如TABLE1和TABLE2)并消去表中任何重复行而派生出一个结果表。当ALL随UNION一起使用时(即
  1530. UNIONALL),不消除重复行。两种情况下,派生表的每一行不是来自TABLE1就是来自TABLE2。
  1531. B:EXCEPT运算符
  1532. EXCEPT运算符通过包括所有在TABLE1中但不在TABLE2中的行并消除所有重复行而派生出一个结果表。当ALL随EXCEPT一起使用时(EXCEPT
  1533. ALL),不消除重复行。
  1534. C:INTERSECT运算符
  1535. INTERSECT运算符通过只包括TABLE1和TABLE2中都有的行并消除所有重复行而派生出一个结果表。当ALL随INTERSECT一起使用时(INTERSECT
  1536. ALL),不消除重复行。
  1537. 注:使用运算词的几个查询结果行必须是一致的。
  1538. 12、说明:使用外连接
  1539. A、leftouterjoin:
  1540. 左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
  1541. SQL:selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
  1542. B:rightouterjoin:
  1543. 右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
  1544. C:fullouterjoin:
  1545. 全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。
  1546. 其次,大家来看一些不错的sql语句
  1547. 1、说明:复制表(只复制结构,源表名:a新表名:b)(Access可用)
  1548. 法一:select*intobfromawhere1<>1
  1549. 法二:selecttop0*intobfroma
  1550. 2、说明:拷贝表(拷贝数据,源表名:a目标表名:b)(Access可用)
  1551. insertintob(a,b,c)selectd,e,ffromb;
  1552. 3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径)(Access可用)
  1553. insertintob(a,b,c)selectd,e,ffrombin‘具体数据库’where条件
  1554. 例子:..frombin'"&Server.MapPath(".")&"data.mdb"&"'where..
  1555. 4、说明:子查询(表名1:a表名2:b)
  1556. selecta,b,cfromawhereaIN(selectdfromb)或者:selecta,b,cfromawhereaIN(1,2,3)
  1557. 5、说明:显示文章、提交人和最后回复时间
  1558. selecta.title,a.username,b.adddatefromtablea,(selectmax(adddate)adddatefromtablewheretable.title=a.title)b
  1559. 6、说明:外连接查询(表名1:a表名2:b)
  1560. selecta.a,a.b,a.c,b.c,b.d,b.ffromaLEFTOUTJOINbONa.a=b.c
  1561. 7、说明:在线视图查询(表名1:a)
  1562. select*from(SELECTa,b,cFROMa)Twheret.a>1;
  1563. 8、说明:between的用法,between限制查询数据范围时包括了边界值,notbetween不包括
  1564. select*fromtable1wheretimebetweentime1andtime2
  1565. selecta,b,c,fromtable1whereanotbetween数值1and数值2
  1566. 9、说明:in的使用方法
  1567. select*fromtable1wherea[not]in(‘值1’,’值2’,’值4’,’值6’)
  1568. 10、说明:两张关联表,删除主表中已经在副表中没有的信息
  1569. deletefromtable1wherenotexists(select*fromtable2wheretable1.field1=table2.field1)
  1570. 11、说明:四表联查问题:
  1571. select*fromaleftinnerjoinbona.a=b.brightinnerjoincona.a=c.cinnerjoindona.a=d.dwhere.....
  1572. 12、说明:日程安排提前五分钟提醒
  1573. SQL:select*from日程安排wheredatediff('minute',f开始时间,getdate())>5
  1574. 13、说明:一条sql语句搞定数据库分页
  1575. selecttop10b.*from(selecttop20主键字段,排序字段from表名orderby排序字段desc)a,表名bwhereb.主键字段=a.主键字段
  1576. orderbya.排序字段
  1577. 14、说明:前10条记录
  1578. selecttop10*formtable1where范围
  1579. 15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排
  1580. 名,等等.)
  1581. selecta,b,cfromtablenametawherea=(selectmax(a)fromtablenametbwheretb.b=ta.b)
  1582. 16、说明:包括所有在TableA中但不在TableB和TableC中的行并消除所有重复行而派生出一个结果表
  1583. (selectafromtableA)except(selectafromtableB)except(selectafromtableC)
  1584. 17、说明:随机取出10条数据
  1585. selecttop10*fromtablenameorderbynewid()
  1586. 18、说明:随机选择记录
  1587. selectnewid()
  1588. 19、说明:删除重复记录
  1589. Deletefromtablenamewhereidnotin(selectmax(id)fromtablenamegroupbycol1,col2,...)
  1590. 20、说明:列出数据库里所有的表名
  1591. selectnamefromsysobjectswheretype='U'
  1592. 21、说明:列出表里的所有的
  1593. selectnamefromsyscolumnswhereid=object_id('TableName')
  1594. 22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select中的case
  1595. selecttype,sum(casevenderwhen'A'thenpcselse0end),sum(casevenderwhen'C'thenpcselse0end),sum(casevenderwhen'B'
  1596. thenpcselse0end)FROMtablenamegroupbytype
  1597. 显示结果:
  1598. typevenderpcs
  1599. 电脑A1
  1600. 电脑A1
  1601. 光盘B2
  1602. 光盘A2
  1603. 手机B3
  1604. 手机C3
  1605. 23、说明:初始化表table1
  1606. TRUNCATETABLEtable1
  1607. 24、说明:选择从10到15的记录
  1608. selecttop5*from(selecttop15*fromtableorderbyidasc)table_别名orderbyiddesc
  1609.   
  1610. 随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
  1611.   对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见
  1612. 的解决方案是建立如下所示的循环:
  1613. Randomize
  1614. RNumber=Int(Rnd*499)+1
  1615.  
  1616. WhileNotobjRec.EOF
  1617. IfobjRec("ID")=RNumberTHEN
  1618. ...这里是执行脚本...
  1619. endif
  1620. objRec.MoveNext
  1621. Wend
  1622.  
  1623.   这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500就是数据库内记录的总数)。然后,你遍历每一记录来测试ID的值、检查
  1624. 其是否匹配RNumber。满足条件的话就执行由THEN关键字开始的那一块代码。假如你的RNumber等于495,那么要循环一遍数据库花的时间可就长了。
  1625. 虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候
  1626. 不就死定了?
  1627.   采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录的recordset,如下所示:
  1628. Randomize
  1629. RNumber=Int(Rnd*499)+1
  1630.  
  1631. SQL="SELECT*FROMCustomersWHEREID="&RNumber
  1632.  
  1633. setobjRec=ObjConn.Execute(SQL)
  1634. Response.WriteRNumber&"="&objRec("ID")&""&objRec("c_email")
  1635.  
  1636.   不必写出RNumber和ID,你只需要检查匹配情况即可。只要你对以上代码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内
  1637. 容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
  1638. 再谈随机数
  1639.   现在你下定决心要榨干Random函数的最后一滴油,那么你可能会一次取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random
  1640. 示例扩展一下就可以用SQL应对上面两种情况了。
  1641.   为了取出几条随机选择的记录并存放在同一recordset内,你可以存储三个随机数,然后查询数据库获得匹配这些数字的记录:
  1642. SQL="SELECT*FROMCustomersWHEREID="&RNumber&"ORID="&RNumber2&"ORID="&RNumber3
  1643.  
  1644.   假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN或者数学等式选出第一条记录和适当数量的递增记录。
  1645. 这一操作可以通过好几种方式来完成,但是SELECT语句只显示一种可能(这里的ID是自动生成的号码):
  1646. SQL="SELECT*FROMCustomersWHEREIDBETWEEN"&RNumber&"AND"&RNumber&"+9"
  1647.   注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。
  1648. 随机读取若干条记录,测试过
  1649. Access语法:SELECTtop10*From表名ORDERBYRnd(id)
  1650. Sqlserver:selecttopn*from表名orderbynewid()
  1651. mysql:Select*From表名OrderByrand()Limitn
  1652. Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有Access的SQL说明,只有自己测试,现在记下以备后查)
  1653. 语法:Selecttable1.fd1,table1,fd2,table2.fd2Fromtable1leftjointable2ontable1.fd1,table2.fd1where...
  1654. 使用SQL语句用...代替过长的字符串显示
  1655. 语法:
  1656. SQL数据库:selectcasewhenlen(field)>10thenleft(field,10)+'...'elsefieldendasnews_name,news_idfromtablename
  1657. Access数据库:SELECTiif(len(field)>2,left(field,2)+'...',field)FROMtablename;
  1658.  
  1659. Conn.Execute说明
  1660. Execute方法
  1661.   该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法的使用格式分为以下两种:
  1662.     1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
  1663.     Set对象变量名=连接对象.Execute("SQL查询语言")
  1664.    Execute方法调用后,会自动创建记录集对象,并将查询结果存储在该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变
  1665. 量就代表了该记录集对象。
  1666.     2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
  1667.     连接对象.Execute"SQL操作性语句"[,RecordAffected][,Option]
  1668.       ·RecordAffected为可选项,此出可放置一个变量,SQL语句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可
  1669. 知道SQL语句队多少条记录进行了操作。
  1670.       ·Option可选项,该参数的取值通常为adCMDText,它用于告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定
  1671. 该参数,可使执行更高效。
  1672. ·BeginTrans、RollbackTrans、CommitTrans方法
  1673.   这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的
  1674. 事务处理结果,即确认事务的处理。
  1675.   事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,
  1676. 并恢复到处里前的状态。
  1677.   BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对
  1678. 象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics