电竞比分网-中国电竞赛事及体育赛事平台

分享

sqlserver數(shù)據(jù)庫操作大全

 我的小園地 2014-04-30

本文為累計(jì)整理,有點(diǎn)亂,湊合著看吧!

  1. ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆  
  2. ☆                                             
  3. ☆                                             
  4. ☆                   sql 寶 典                       
  5. ☆                                             
  6. ☆                                             
  7. ☆                 2012年-8月 修訂版                    
  8. ☆                                             
  9. ☆                修訂人:情誼續(xù)寫經(jīng)典                   
  10. ☆                                             
  11. ☆    鄭重聲明:本版本并非國際標(biāo)準(zhǔn),使用前請查詢數(shù)據(jù)庫文檔是否支持,轉(zhuǎn)載請注明出處!      
  12. ☆                                             
  13. ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆  
  14.   
  15. MS SQL里沒有括號時(shí),運(yùn)算進(jìn)行的次序?qū)⑹窍瘸撕蟪倌:蠹訙p  
  16.   
  17. 減號(-)也有兩種用途:1.作為負(fù)號使用 2.從某一列中減去另一列  
  18.   
  19. and   or   not    
  20. 如果一個(gè)where子句中同時(shí)出現(xiàn)這三個(gè)操作符  
  21. 最先評估not   然后是and  然后是or   
  22.   
  23.   
  24. coalesce 哪個(gè)不為空用哪個(gè)   
  25. coalesce(i.ProductID,d.ProductID)  
  26.   
  27. @@rowcount  
  28. 返回上一條語句影響的行數(shù)  
  29.   
  30. SQL判斷某列中是否包含中文字符或者英文字符   
  31.   select * from 表名 where 某列 like '%[吖-座]%'    
  32.   select * from 表名 where 某列 like '%[a-z]%'  
  33.   
  34. --數(shù)據(jù)操作,中英文對照   
  35. select --從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列    
  36. insert --向數(shù)據(jù)庫表添加新數(shù)據(jù)行    
  37. delete --從數(shù)據(jù)庫表中刪除數(shù)據(jù)行    
  38. update --更新數(shù)據(jù)庫表中的數(shù)據(jù)    
  39. --數(shù)據(jù)定義    
  40. create table --創(chuàng)建一個(gè)數(shù)據(jù)庫表    
  41. drop table --從數(shù)據(jù)庫中刪除表    
  42. alter table --修改數(shù)據(jù)庫表結(jié)構(gòu)    
  43. create view --創(chuàng)建一個(gè)視圖    
  44. drop view --從數(shù)據(jù)庫中刪除視圖    
  45. create index --為數(shù)據(jù)庫表創(chuàng)建一個(gè)索引    
  46. drop index --從數(shù)據(jù)庫中刪除索引    
  47. create proceduer --創(chuàng)建一個(gè)存儲過程    
  48. drop proceduer --從數(shù)據(jù)庫中刪除存儲過程    
  49. create trigger --創(chuàng)建一個(gè)觸發(fā)器    
  50. drop trigger --從數(shù)據(jù)庫中刪除觸發(fā)器    
  51. create schema --向數(shù)據(jù)庫添加一個(gè)新模式    
  52. drop schema --從數(shù)據(jù)庫中刪除一個(gè)模式    
  53. create domain --創(chuàng)建一個(gè)數(shù)據(jù)值域    
  54. alter domain --改變域定義    
  55. drop domain --從數(shù)據(jù)庫中刪除一個(gè)域    
  56. --數(shù)據(jù)控制    
  57. grant --授予用戶訪問權(quán)限    
  58. deny --拒絕用戶訪問    
  59. revoke --解除用戶訪問權(quán)限    
  60. --事務(wù)控制    
  61. commit --結(jié)束當(dāng)前事務(wù)    
  62. rollback --中止當(dāng)前事務(wù)    
  63. set transaction --定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征    
  64. --程序化SQL    
  65. declare --為查詢設(shè)定游標(biāo)    
  66. explan --為查詢描述數(shù)據(jù)訪問計(jì)劃    
  67. open --檢索查詢結(jié)果打開一個(gè)游標(biāo)    
  68. fetch --檢索一行查詢結(jié)果    
  69. close --關(guān)閉游標(biāo)    
  70. prepare --為動態(tài)執(zhí)行準(zhǔn)備SQL 語句    
  71. execute --動態(tài)地執(zhí)行SQL 語句    
  72. describe --描述準(zhǔn)備好的查詢   
  73.   
  74.   
  75. ------------------SQL中插入數(shù)據(jù)的技巧 -----------------  
  76.   
  77. 插入少量數(shù)據(jù)時(shí)可以用:  
  78. insert into 表名(列名1,列名2...) values (值1,值2...)  
  79.   
  80. 插入大量數(shù)據(jù)時(shí)可以用:  
  81.     insert into 要復(fù)制的表名 select * from 源表名  
  82. 或:insert into 要復(fù)制的表名(列名1,列名2...) select (列名1,列名2...) from 源表名  
  83.   
  84. insert select 語句要求你遵循如下規(guī)則:  
  85.   SELECT 語句不能從被插入數(shù)據(jù)的表中選擇行  
  86.   INSERT INTO 中的列數(shù)必須與SELECT 語句返回的列數(shù)相等  
  87.   INSERT INTO 中的數(shù)據(jù)類型要與SELECT 語句返回的數(shù)據(jù)類型相同  
  88.   
  89. insert select 語句的另外一個(gè)用處對表進(jìn)行備份:  
  90.   select * into 臨時(shí)表名 from 源表名  
  91.   
  92.   
  93.   
  94. ----------SQL中truncate table和delete和drop的區(qū)別 ----------  
  95.   
  96. truncate table在功能上與不帶 Where 子句的 Delete 語句相同,二者均刪除表中的全部行  
  97. 但truncate table比 Delete 速度快,且使用的系統(tǒng)和事務(wù)日志資源少。  
  98. Delete 語句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng)。  
  99. truncate table通過釋放存儲表數(shù)據(jù)所用的數(shù)據(jù)頁來刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁的釋放。  
  100. truncate table刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。  
  101. 新行標(biāo)識所用的計(jì)數(shù)值重置為該列的種子。如果想保留標(biāo)識計(jì)數(shù)值,請改用 Delete。  
  102. 對于由 FOREIGN KEY 約束引用的表,不能使用truncate table,而應(yīng)使用不帶 Where 子句的 Delete 語句。  
  103. 由于truncate table不記錄在日志中,所以它不能激活觸發(fā)器。   
  104. truncate table不能用于參與了索引視圖的表。   
  105.   
  106. truncate,delete,drop的異同點(diǎn):    
  107. 注意:這里說的delete是指不帶where子句的delete語句   
  108.     
  109. 相同點(diǎn):truncate和不帶where子句的delete, 以及drop都會刪除表內(nèi)的數(shù)據(jù)    
  110.   
  111. 不同點(diǎn):    
  112. 1.truncate和 delete只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)(定義)    
  113.   drop語句將刪除表的結(jié)構(gòu)被依賴的約束(constrain),觸發(fā)器(trigger),索引(index);   
  114.   依賴于該表的存儲過程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài).   
  115.     
  116. 2.delete語句是dml,這個(gè)操作會放到rollback segement中,事務(wù)提交之后才生效;  
  117.   如果有相應(yīng)的trigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā).    
  118.   truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.   
  119.   
  120. 3.delete語句不影響表所占用的extent, 高水線(high w2atermark)保持原位置不動    
  121.    顯然drop語句將表所占用的空間全部釋放    
  122.    truncate 語句缺省情況下將空間釋放到 minextents個(gè) extent,除非使用reuse storage;     
  123.    truncate會將高水線復(fù)位(回到最開始).   
  124.   
  125. 4.速度,一般來說: drop> truncate > delete   
  126.   
  127. 5.安全性:小心使用drop 和truncate,尤其沒有備份的時(shí)候.否則哭都來不及   
  128.   
  129. 使用上:   
  130. 想刪除部分?jǐn)?shù)據(jù)行用delete,注意帶上where子句. 回滾段要足夠大.   
  131.   
  132. 想刪除表,當(dāng)然用drop   
  133.   
  134. 想保留表而將所有數(shù)據(jù)刪除. 如果和事務(wù)無關(guān),用truncate即可.   
  135.   
  136. 如果和事務(wù)有關(guān),或者想觸發(fā)trigger,還是用delete.   
  137.   
  138. 如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導(dǎo)入/插入數(shù)據(jù)   
  139.   
  140. ---------------------------好句收藏--------------------------  
  141.   
  142. 1.UNION 將返回兩個(gè)查詢的結(jié)果并去除其中的重復(fù)部分  
  143.  SELECT NAME FROM SOFTBALL  
  144.  UNION  
  145.  SELECT NAME FROM FOOTBALL  
  146.   
  147.  distinct (去掉完全重復(fù)的記錄)  
  148.  select distinct * from 表名  
  149.    
  150.  with ties (并列顯示完全重復(fù)的記錄)  
  151.  select Top 10 with ties * from 表名  
  152.   
  153. 2.UNION ALL 不去掉重復(fù)的記錄  
  154.  SELECT NAME FROM SOFTBALL  
  155.  UNION ALL  
  156.  SELECT NAME FROM FOOTBALL  
  157.   
  158. 3.INTERSECT 返回兩個(gè)表中共有的行  
  159.  SELECT * FROM FOOTBALL  
  160.  INTERSECT  
  161.  SELECT * FROM SOFTBALL  
  162.   
  163. 4.MINUS (相減)  
  164. 返回的記錄是存在于第一個(gè)表中但不存在于第二個(gè)表中的記錄  
  165.  SELECT * FROM FOOTBALL   
  166.  MINUS  
  167.  SELECT * FROM SOFTBALL  
  168.   
  169. 5.in(滿足括號里任意一個(gè)條件即可)  
  170.  SELECT * FROM FRIENDS WHERE STATE IN('CA','CO','LA')  
  171.   
  172. 6.BEWTEEN (滿足區(qū)間)  
  173.  SELECT * FROM PRICE WHERE WHOLESALE BETWEEN 0.25 AND 0.75  
  174.   
  175. 7.連接(||)  
  176. 可以將兩個(gè)字符串連接起來  
  177.  SELECT (NAMEa || NAMEb) as 新列名 FROM FRIENDS  
  178. 格式化連接  
  179.  SELECT (NAMEa || ',' || NAMEb) as 新列名 FROM FRIENDS --在連接的數(shù)據(jù)中間加上自定義字符串  
  180.   
  181. 8.STARTING WITH (它的作用與like相似,用之前要測試sql解釋器是否支持此語法)  
  182.  SELECT 列名1,列名2...  FROM 表名 WHERE 列名 STARTING WITH('Ca')  
  183.   
  184.   
  185.   
  186. ORDER BY (排序)  
  187. 升序:SELECT * FROM 表名 ORDER BY 列名  
  188. 降序:SELECT * FROM 表名 ORDER BY 列名 DESC  
  189. 技巧:假如你已經(jīng)知道了你想要進(jìn)行排序的列是表中的第一列的話,那么你可以用ORDER  
  190. BY 1 來代替輸入列的名字  
  191.   
  192. GROUP BY (分組查詢)  
  193.  SELECT 列名 FROM 表名 GROUP BY 列名  
  194.   
  195. HAVING (對你需要進(jìn)行分組的數(shù)據(jù)進(jìn)行限制)  
  196.  SELECT 列名1,AVG(列名2) FROM 表名 GROUP BY 列名 HAVING AVG(列名3)>66  
  197.   
  198. ---表的不等值聯(lián)合  
  199. 不等值聯(lián)合則是在WHERE 子句中使用除了等號以外的其它比較運(yùn)算符  
  200. 例句:SELECT O.NAME,O.PARTNUM,P.PARTNUM FROM ORDERS as O,PART as P WHERE O.PARTNUM > P.PARTNUM  
  201.   
  202. ---表的自我聯(lián)合  
  203.  WHERE F.PARTNUM = S.PARTNUM AND F.DESCRIPTION <> S.DESCRIPTION  
  204.   
  205. ------------------------日期函數(shù)--------------------------  
  206.   
  207. VARIANCE (返回某一列數(shù)值的方差)   
  208. 例句:SELECT VARIANCE(列名) AS 新列名 FROM 表名  --列必須為int或double等數(shù)值類型  
  209.   
  210. STDDEV (返回某一列數(shù)值的標(biāo)準(zhǔn)差)  
  211. 例句:SELECT STDDEV(列名) AS 新列名 FROM 表名  --列必須為int或double等數(shù)值類型  
  212.   
  213. ADD_MONTHS (該函數(shù)的功能是將給定的日期增加一個(gè)月)  
  214. 例句:SELECT ADD_MONTHS(ENDDATE,1) AS 新列名 FROM 表名  --ENDDATE為datetime類型  
  215.       ADD_MONTHS(ENDDATE,1)可以使用于where條件  
  216.   
  217. LAST_DAY (可以返回指定月份的最后一天是幾號)  
  218. 例句:SELECT LAST_DAY(ENDDATE) AS 新列名 FROM 表名  
  219.   
  220. DISTINCT (得到唯一的結(jié)果,就是去掉重復(fù)的結(jié)果)  
  221. 例句:SELECT DISTINCT 列名 FROM 表名  
  222.   
  223. MONTHS_BETWEEN (得到給定的兩個(gè)日期中有多少個(gè)月)  
  224. 例句1:SELECT MONTHS_BETWEEN(ENDDATE,STARTDATE) AS 新列名 FROM 表名  
  225. 例句2:SELECT * FROM 表名 WHERE MONTHS_BETWEEN(DATETIME1,DATETIME2)>0  
  226.   
  227. SYSDATE  (將返回系統(tǒng)的日期和時(shí)間)  
  228. 例句:SELECT DISTINCT SYSDATE FROM 表名  
  229.   
  230. ----------------------數(shù)學(xué)函數(shù)--------------------------  
  231.   
  232. ABS() 函數(shù)返回給定數(shù)字的絕對值  
  233. CEIL() 返回與給定參數(shù)相等或比給定參數(shù)在的最小整數(shù)  
  234. FLOOR() 返回與給定參數(shù)相等或比給定參數(shù)在的最大整數(shù)  
  235. MOD(A,B) 返回A 與B 相除后的余數(shù)  
  236. SIGN()  如果參數(shù)的值為負(fù)數(shù)返回-1 ,如果參數(shù)的值為正數(shù)返回1 ,如果參數(shù)為零返回零  
  237. SQRT() 該函數(shù)返回參數(shù)的平方根,由于負(fù)數(shù)是不能開平方的所以不能將該函數(shù)應(yīng)用于負(fù)數(shù)  
  238.   
  239. -----------------------字符函數(shù)---------------------------  
  240.   
  241. CHR() 該函數(shù)返回與所給數(shù)值參數(shù)等當(dāng)?shù)脑贏SCLL碼字符,返回的字符取決于數(shù)據(jù)庫所依賴的字符集  
  242. 例句:SELECT CHR(列名) FROM 表名  
  243.   
  244. CONCAT() 與||符號相同,表示將兩個(gè)字符串連接起來  
  245. 例句:SELECT CONCAT(列名1,列名2) FROM 表名  
  246.   
  247. INITCAP() 該函數(shù)將參數(shù)的第一個(gè)字母變?yōu)榇髮?此外其它的字母則轉(zhuǎn)換成小寫  
  248. 例句:SELECT INITCAP(列名) as 新列名 FROM 表名  
  249.   
  250. LOWER() 將參數(shù)全部轉(zhuǎn)換為小寫字母  
  251. UPPER() 將參數(shù)全部轉(zhuǎn)換為大寫字母  
  252. LENGTH() 將返回指定字符串的長度  
  253.   
  254. ----------------------轉(zhuǎn)換函數(shù)----------------------  
  255.   
  256. TO_CHAR() 將一個(gè)數(shù)字轉(zhuǎn)換為字符型  
  257. TO_NUMBER() 將一個(gè)字符串型數(shù)字轉(zhuǎn)換為數(shù)值型  
  258.   
  259. ---其它函數(shù)  
  260. GREATEST() 將會返回在字母表中最靠后的字符開頭的字符串,函數(shù)是返回幾個(gè)表達(dá)式中最大的;  
  261. 例句:SELECT GREATEST(‘ALPHA’,’BRAVO’,’FOXTROT’,’DELTA’,’FP’) FROM 表名  
  262.   
  263. LEAST()    函數(shù)是返回幾個(gè)表達(dá)式中最小的!  
  264. 例句:SELECT DISTINCT LEAST(34,567,3,45,1090) FROM 表名  
  265.   
  266. USER() 函數(shù)將返回當(dāng)前使用數(shù)據(jù)庫的用戶的名字  
  267. 例句:SELECT DISTINCT USER FROM 表名  
  268.   
  269.   
  270. -------------------條件語句后用的關(guān)鍵字---------------  
  271.   
  272. EXISTS  
  273. 從子查詢中返回的行數(shù)至少有一行時(shí),EXIST返回為true。返回為空時(shí),EXIST返回為false。  
  274. 例句:  
  275. SELECT NAME FROM ORDERS  
  276. WHERE EXISTS(SELECT * FROM ORDERS WHERE NAME ='MOSTLY HARMLESS')  
  277.   
  278.   
  279. ANY/SOME   ANY與SOME具有同樣的功能  
  280. ANY與子查詢中的每一行與主查詢進(jìn)行比較,并對子查詢中的每一行返回一個(gè)TRUE值  
  281. 區(qū)別:  
  282. IN只相當(dāng)于多個(gè)等號的作用,IN不能用于大于或小于的判斷。  
  283. 而ANY 和SOME 則可以使用其它的比較運(yùn)算符如大于或小于。  
  284. 例句:  
  285. SELECT NAME FROM ORDERS WHERE NAME > ANY  
  286. (SELECT NAME FROM ORDERS WHERE NAME ='JACKS BIKE')  
  287.   
  288.   
  289. ALL 關(guān)鍵字的作用在于子查詢中的所有結(jié)果均滿足條件時(shí)它才會返回TRUE,ALL常起雙重否定的作用。  
  290. 例句:  
  291. SELECT NAME FROM ORDERS WHERE NAME <> ALL  
  292. (SELECT NAME FROM ORDERS WHERE NAME ='JACKS BIKE')  
  293.   
  294.   
  295. -------------------局部變量和全局變量--------------------  
  296.   
  297. 局部變量必須以“@”開頭,而且必須先用DECLARE命令說明后才可使用。  
  298. 語法:DECLARE @變量名 變量類型   
  299.   
  300. 局部變量賦值必須使用SELECT或SET命令來設(shè)定變量的值  
  301. 語法:  SELECT @局部變量=變量值  
  302.     SET  @局部變量=變量值  
  303.   
  304. 全局變量不是由用戶的程序定義的,它們是在服務(wù)器級定應(yīng)義的。  
  305. 只能使用預(yù)先說明及定義的變局變量。  
  306. 引用全局變量時(shí),必須以“@@”開頭。  
  307. 局部變量的名稱不能與全局變量的名稱相同、否則會在應(yīng)用中出錯(cuò)  
  308.   
  309.   
  310.   
  311.   
  312. ----------------------事務(wù)-視圖-索引------------------  
  313.   
  314. 事務(wù)是一種機(jī)制,用以維護(hù)數(shù)據(jù)庫的完整性。  
  315.   
  316. 事務(wù)有4個(gè)屬性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)以及持久性(Durability),也稱作事務(wù)的ACID屬性。   
  317.   
  318. 原子性:事務(wù)內(nèi)的所有工作要么全部完成,要么全部不完成,不存在只有一部分完成的情況。   
  319.   
  320. 一致性:事務(wù)內(nèi)的然后操作都不能違反數(shù)據(jù)庫的然后約束或規(guī)則,事務(wù)完成時(shí)有內(nèi)部數(shù)據(jù)結(jié)構(gòu)都必須是正確的。   
  321.   
  322. 隔離性:事務(wù)直接是相互隔離的,如果有兩個(gè)事務(wù)對同一個(gè)數(shù)據(jù)庫進(jìn)行操作,比如讀取表數(shù)據(jù)。  
  323.         任何一個(gè)事務(wù)看到的所有內(nèi)容要么是其他事務(wù)完成之前的狀態(tài),要么是其他事務(wù)完成之后的狀態(tài)。  
  324.         一個(gè)事務(wù)不可能遇到另一個(gè)事務(wù)的中間狀態(tài)。   
  325.   
  326. 持久性:事務(wù)完成之后,它對數(shù)據(jù)庫系統(tǒng)的影響是持久的,即使是系統(tǒng)錯(cuò)誤,重新啟動系統(tǒng)后,該事務(wù)的結(jié)果依然存在。  
  327.   
  328. 事務(wù)的模式   
  329.   
  330.         a、 顯示事務(wù)   
  331.   
  332.         顯示事務(wù)就是用戶使用T-SQL明確的定義事務(wù)的開始(begin transaction)和提交(commit transaction)或回滾事務(wù)(rollback transaction)   
  333.   
  334.         b、 自動提交事務(wù)   
  335.   
  336.         自動提交事務(wù)是一種能夠自動執(zhí)行并能自動回滾事務(wù),這種方式是T-SQL的默認(rèn)事務(wù)方式。  
  337.         例如在刪除一個(gè)表記錄的時(shí)候,如果這條記錄有主外鍵關(guān)系的時(shí)候,刪除就會受主外鍵約束的影響,那么這個(gè)刪除就會取消。   
  338.   
  339.         可以設(shè)置事務(wù)進(jìn)入隱式方式:set implicit_transaction on;   
  340.   
  341.         c、 隱式事務(wù)   
  342.   
  343.         隱式事務(wù)是指當(dāng)事務(wù)提交或回滾后,SQL Server自動開始事務(wù)。因此,隱式事務(wù)不需要使用begin transaction顯示開始,   
  344.         只需直接失業(yè)提交事務(wù)或回滾事務(wù)的T-SQL語句即可。   
  345.   
  346.         使用時(shí),需要設(shè)置set implicit_transaction on語句,將隱式事務(wù)模式打開,下一個(gè)語句會啟動一個(gè)新的事物,再下一個(gè)語句又將啟動一個(gè)新事務(wù)。  
  347.   
  348.   
  349.   
  350. 開始事務(wù): begin    transaction  
  351. 提交事務(wù): commit   transaction  
  352. 回滾事務(wù): rollback transaction  
  353.   
  354.   
  355. 創(chuàng)建視圖:create view 視圖名 as <select語句>  
  356. 刪除視圖:drop view 試圖名  
  357. 視圖定義中的select語句中不能包括下列:  
  358.       1.order by子句,除非select語句的選擇列有top子句  
  359.       2.into關(guān)鍵字  
  360.       3.引用臨時(shí)表或變量  
  361.   
  362. 創(chuàng)建索引:create unique 【clustered | nonclustered】 index 索引名 on 表名(列名) 【with fillfactor=x】  
  363.           unique  可選,指定唯一索引  
  364.           clustered , nonclustered 可選,指定是聚集索引或非聚集索引  
  365.           fillfactor 可選,表示填充因子,指定一個(gè)0-100的值,該值指示索引頁填滿的空間所占的百分比  
  366.   
  367. 刪除索引:drop index 表名.索引名  
  368.   
  369.   
  370. 下面的表總結(jié)了何時(shí)使用聚集索引或非聚集索引(很重要)。  
  371.   
  372.     動作描述        使用聚集索引     使用非聚集索引   
  373.   
  374.     外鍵列           應(yīng)                 應(yīng)   
  375.     主鍵列           應(yīng)             應(yīng)   
  376.  列經(jīng)常被分組排序(order by)       應(yīng)             應(yīng)   
  377.     返回某范圍內(nèi)的數(shù)據(jù)     應(yīng)             不應(yīng)   
  378.      小數(shù)目的不同值          應(yīng)             不應(yīng)   
  379.      大數(shù)目的不同值         不應(yīng)             應(yīng)   
  380.       頻繁更新的列         不應(yīng)         應(yīng)   
  381.      頻繁修改索引列         不應(yīng)             應(yīng)   
  382.     一個(gè)或極少不同值         不應(yīng)             不應(yīng)   
  383.   
  384.   
  385.   
  386.   
  387. -------------------------操作數(shù)據(jù)庫----------------------  
  388.   
  389. SQL分類:  
  390.   
  391. DDL類型包括數(shù)據(jù)庫、表的創(chuàng)建,修改,刪除,聲明—數(shù)據(jù)定義語言(CREATE,ALTER,DROP,DECLARE)  
  392.   
  393. DML類型包括數(shù)據(jù)表中記錄的查詢,刪除,修改,插入—數(shù)據(jù)操縱語言(SELECT,DELETE,UPDATE,INSERT)  
  394.   
  395. DCL類型包括數(shù)據(jù)庫用戶賦權(quán),廢除用戶訪問權(quán)限, 提交當(dāng)前事務(wù),中止當(dāng)前事務(wù)—數(shù)據(jù)控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)  
  396.   
  397. 首先,簡要介紹基礎(chǔ)語句:  
  398.   
  399. 1、說明:創(chuàng)建數(shù)據(jù)庫  
  400.   
  401. CREATE DATABASE db1(db1代表數(shù)據(jù)庫,可自命名)  
  402. on     primary      --默認(rèn)屬于primary主文件組,可省略  
  403. (  
  404.  --數(shù)據(jù)文件的具體描述  
  405.  name='MySchool_data',       --主數(shù)據(jù)文件的邏輯名稱  
  406.  filename='D:\project\MySchool_data.mdf', --主數(shù)據(jù)文件的物理名稱  
  407.  size=5MB,                   --主數(shù)據(jù)文件的初始大小  
  408.  maxsize=100MB,              --主數(shù)據(jù)文件增長的最大值  
  409.  filegrowth=15%              --主數(shù)據(jù)文件的增長率  
  410. )  
  411. log on  
  412. (  
  413.  --日記文件的具體描述,各參數(shù)含義同上  
  414.  name='MySchool_log',  
  415.  filename='D:\project\MySchool_data.ldf',  
  416.  size=2MB,  
  417.  filegrowth=1MB  
  418. )  
  419.   
  420. 2、說明:刪除數(shù)據(jù)庫  
  421.   
  422. drop database db1(db1代表數(shù)據(jù)庫,可自命名)  
  423.   
  424. 3、說明:備份sql server  
  425.   
  426. --- 創(chuàng)建 備份數(shù)據(jù)的 device  
  427.   
  428. USE master  
  429.   
  430. EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'  
  431.   
  432. --- 開始 備份  
  433.   
  434. BACKUP DATABASE pubs TO testBack  
  435.   
  436. 4、說明:創(chuàng)建新表  
  437.   
  438. create table tb1  
  439. (  
  440. Id int not null primary key, --設(shè)置為主鍵  
  441. one int identity(1,1),       --設(shè)為標(biāo)識列  
  442. name varchar not null,       --非空  
  443. phone nvarchar(100),         --可以為空  
  444. ...  
  445. )  
  446.   
  447.   
  448. 根據(jù)已有的表創(chuàng)建新表:  
  449.   
  450. A:create table tab_new like tab_old (使用舊表創(chuàng)建新表)  
  451.   
  452. B:create table tab_new as select col1,col2… from tab_old definition only  
  453.   
  454.   
  455. 5、說明:  
  456.   
  457. 刪除新表:drop table tb1  
  458. use  MySchool  --將當(dāng)前數(shù)據(jù)庫設(shè)置為MySchool  
  459. if   exists(select * from MySchool where name='Student') --exist是查詢語句,檢測某個(gè)查詢是否存在  
  460. drop table Student  
  461.   
  462. 6、說明:  
  463.   
  464. 增加一個(gè)列:Alter table 表名 add 字段名 字段類型 字段說明/約束  
  465.   
  466. 添加帶主鍵及約束的語法:  
  467. alter table  表名  
  468. add constraint  約束名  約束類型  具體的約束說明  
  469.   
  470. --添加主鍵約束(將StudentNo作為主鍵)  
  471. alter table Student  
  472. add constraint PK_stuNo primary key (StudentNo)  
  473. --添加唯一約束(身份證號唯一)  
  474. alter table Student  
  475. add constraint UQ_stuID unique (身份證號列名)  
  476. --添加默認(rèn)約束(如果地址不填,默認(rèn)為“地址不詳”)  
  477. alter table Student  
  478. add constraint DF_stuAddress default ('地址不詳') for Address  
  479. --添加檢查約束(要求出生日期在1980年1月1日之后)  
  480. alter table Student  
  481. add constraint CK_stuBornDate check (BornDate >= '1980-01-01')  
  482. --添加外鍵約束(主表Student和從表Result建立關(guān)系,關(guān)聯(lián)列為StudentNo)  
  483. alter table Result  
  484. add constraint FK_stuNo   
  485.     foreign key (stuNo) references Student(stuNo)  
  486.   
  487.   
  488. 刪除列的語法:  
  489.   
  490. 你刪除的時(shí)候會提示你,有默認(rèn)約束依賴該字段,那么你需要先刪除默認(rèn)約束(錯(cuò)誤提示里會有默認(rèn)約束名),再刪除字段:  
  491. ALTER TABLE 表名 DROP CONSTRAINT 默認(rèn)約束名  
  492. GO  
  493. ALTER TABLE 表名   DROP COLUMN    字段名  
  494. GO  
  495.   
  496. 刪除約束:  
  497. alter table Student  
  498. drop constraint 約束名  
  499.   
  500. 例句:  
  501. alter table Student  
  502. add constraint PK_stuNo  
  503.   
  504. 7、說明:  
  505.   
  506. 添加主鍵:Alter table tabname add primary key(ID)(設(shè)置某字段為主鍵,ID可自由設(shè)置,主鍵數(shù)據(jù)不可重復(fù))  
  507.   
  508. 說明:  
  509.   
  510. 刪除主鍵:Alter table tabname drop primary key(ID)(刪除某字段主鍵)  
  511.   
  512. 8、說明:  
  513.   
  514. 創(chuàng)建索引:create [unique] index idxname on tabname(col….)  
  515.   
  516. 刪除索引:drop index idxname  
  517.   
  518. 注:索引是不可更改的,想更改必須刪除重新建。  
  519.   
  520. 9、說明:  
  521.   
  522. 創(chuàng)建視圖:create view viewname as select statement  
  523.   
  524. 刪除和修改視圖  
  525. alter view  yourviewname   as...  
  526. drop view  yourviewname   as...  
  527. 加密視圖  
  528. alter  view  yourviewname  with encryption as...  
  529. 加密了之后連你自己也看不到原代碼了  
  530.   
  531.   
  532. 10、說明:幾個(gè)簡單的基本的sql語句  
  533.   
  534. 選擇:select * from table1 where Id=1(Id=1為條件語句,根據(jù)自己情況自定義)  
  535.   
  536. 插入:insert into table1(field1,field2) values(value1,value2)  
  537.   
  538. 刪除:delete from table1 where 范圍  
  539.   
  540. 更新:update table1 set field1=value1 where 范圍  
  541.   
  542. 查找:select * from table1 where field1 like ’%value1%’ ---like的語法很精妙,查資料!  
  543.   
  544. 排序:select * from table1 order by field1,field2 [desc]  
  545.   
  546. 總數(shù):select count * as totalcount from table1  
  547.   
  548. 求和:select sum(field1) as sumvalue from table1  
  549.   
  550. 平均:select avg(field1) as avgvalue from table1  
  551.   
  552. 最大:select max(field1) as maxvalue from table1  
  553.   
  554. 最?。簊elect min(field1) as minvalue from table1  
  555.   
  556. 11、說明:幾個(gè)高級查詢運(yùn)算詞  
  557.   
  558. A: UNION 運(yùn)算符  
  559.   
  560. UNION 運(yùn)算符通過組合其他兩個(gè)結(jié)果表(例如 TABLE1 和 TABLE2)并消去表中任何重復(fù)行而派生出一個(gè)結(jié)果表。  
  561. 當(dāng) ALL 隨 UNION 一起使用時(shí)(即 UNION ALL),不消除重復(fù)行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。  
  562.   
  563. B: EXCEPT 運(yùn)算符  
  564.   
  565. EXCEPT 運(yùn)算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。  
  566. 當(dāng) ALL 隨 EXCEPT 一起使用時(shí) (EXCEPT ALL),不消除重復(fù)行。  
  567.   
  568. C: INTERSECT 運(yùn)算符  
  569.   
  570. INTERSECT 運(yùn)算符通過只包括 TABLE1 和 TABLE2 中都有的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表。  
  571. 當(dāng) ALL 隨 INTERSECT 一起使用時(shí) (INTERSECT ALL),不消除重復(fù)行。  
  572.   
  573. 注:使用運(yùn)算詞的幾個(gè)查詢結(jié)果行必須是一致的。  
  574.   
  575. 12、說明:使用外連接  
  576.   
  577. A、left outer join:  
  578.   
  579. 左外連接(左連接):結(jié)果集幾包括連接表的匹配行,也包括左連接表的所有行。  
  580.   
  581. SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c  
  582.   
  583. B:right outer join:  
  584.   
  585. 右外連接(右連接):結(jié)果集既包括連接表的匹配連接行,也包括右連接表的所有行。  
  586.   
  587. C:full outer join:  
  588.   
  589. 全外連接:不僅包括符號連接表的匹配行,還包括兩個(gè)連接表中的所有記錄。  
  590.   
  591. 其次,大家來看一些不錯(cuò)的sql語句  
  592.   
  593. 1、說明:復(fù)制表(只復(fù)制結(jié)構(gòu),源表名:a 新表名:b) (Access可用)  
  594.   
  595. 法一:select * into b from a where 1<>1 (僅用于SQlServer)  
  596.   
  597. 法二:select top 0 * into b from a  
  598.   
  599. 2、說明:拷貝表(拷貝數(shù)據(jù),源表名:a 目標(biāo)表名:b) (Access可用)  
  600.   
  601. insert into b(a, b, c) select d,e,f from b;  
  602.   
  603. 3、說明:跨數(shù)據(jù)庫之間表的拷貝(具體數(shù)據(jù)使用絕對路徑) (Access可用)  
  604.   
  605. insert into b(a, b, c) select d,e,f from b in ‘具體數(shù)據(jù)庫’ where 條件  
  606.   
  607. 例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..  
  608.   
  609. 4、說明:子查詢(表名1:a 表名2:b)  
  610.   
  611. select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)  
  612.   
  613. 5、說明:顯示文章、提交人和最后回復(fù)時(shí)間  
  614.   
  615. select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b  
  616.   
  617. 6、說明:外連接查詢(表名1:a 表名2:b)  
  618.   
  619. select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c  
  620.   
  621. 7、說明:在線視圖查詢(表名1:a )  
  622.   
  623. select * from (SELECT a,b,c FROM a) T where t.a > 1;  
  624.   
  625. 8、說明:between的用法,between限制查詢數(shù)據(jù)范圍時(shí)包括了邊界值,not between不包括  
  626.   
  627. select * from table1 where time between time1 and time2  
  628.   
  629. select a,b,c, from table1 where a not between 數(shù)值1 and 數(shù)值2  
  630.   
  631. 9、說明:in 的使用方法  
  632.   
  633. select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)  
  634.   
  635. 10、說明:兩張關(guān)聯(lián)表,刪除主表中已經(jīng)在副表中沒有的信息  
  636.   
  637. delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )  
  638.   
  639. 11、說明:四表聯(lián)查問題:  
  640.   
  641. select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....  
  642.   
  643. 12、說明:日程安排提前五分鐘提醒  
  644.   
  645. SQL: select * from 日程安排 where datediff('minute',f開始時(shí)間,getdate())>5  
  646.   
  647. 13、說明:一條sql 語句搞定數(shù)據(jù)庫分頁  
  648.   
  649. select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段  
  650.   
  651. 14、說明:前10條記錄  
  652.   
  653. select top 10 * form table1 where 范圍  
  654.   
  655. 15、說明:選擇在每一組b值相同的數(shù)據(jù)中對應(yīng)的a最大的記錄的所有信息(類似這樣的用法可以用于論壇每月排行榜,每月熱銷產(chǎn)品分析,按科目成績排名,等等.)  
  656.   
  657. select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)  
  658.   
  659. 16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重復(fù)行而派生出一個(gè)結(jié)果表  
  660.   
  661. (select a from tableA ) except (select a from tableB) except (select a from tableC)  
  662.   
  663. 17、說明:隨機(jī)取出10條數(shù)據(jù)  
  664.   
  665. select top 10 * from tablename order by newid()  
  666.   
  667. 18、說明:隨機(jī)選擇記錄  
  668.   
  669. select newid()  
  670.   
  671. 19、說明:刪除重復(fù)記錄  
  672.   
  673. Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)  
  674.   
  675. 20、說明:列出數(shù)據(jù)庫里所有的表名  
  676.   
  677. select name from sysobjects where type='U'  
  678.   
  679. 21、說明:列出表里的所有的  
  680.   
  681. select name from syscolumns where id=object_id('TableName')  
  682.   
  683. 22、說明:列示type、vender、pcs字段,以type字段排列,case可以方便地實(shí)現(xiàn)多重選擇,類似select 中的case。  
  684.   
  685. select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),  
  686.             sum(case vender when 'B' then pcs else 0 end)   
  687. FROM tablename   
  688. group by type  
  689.   
  690. 顯示結(jié)果:  
  691.   
  692. type vender pcs  
  693.   
  694. 電腦 A 1  
  695.   
  696. 電腦 A 1  
  697.   
  698. 光盤 B 2  
  699.   
  700. 光盤 A 2  
  701.   
  702. 手機(jī) B 3  
  703.   
  704. 手機(jī) C 3  
  705.   
  706. 23、說明:初始化表table1  
  707.   
  708. TRUNCATE TABLE table1  
  709.   
  710. 24、說明:選擇從10到15的記錄  
  711.   
  712. select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc  
  713.   
  714. 隨機(jī)選擇數(shù)據(jù)庫記錄的方法(使用Randomize函數(shù),通過SQL語句實(shí)現(xiàn))  
  715.   
  716. 對存儲在數(shù)據(jù)庫中的數(shù)據(jù)來說,隨機(jī)數(shù)特性能給出上面的效果,但它們可能太慢了些。  
  717. 你不能要求ASP“找個(gè)隨機(jī)數(shù)”然后打印出來。實(shí)際上常見的解決方案是建立如下所示的循環(huán):  
  718.   
  719. Randomize  
  720.   
  721. RNumber = Int(Rnd*499) +1  
  722.   
  723. While Not objRec.EOF  
  724.   
  725. If objRec("ID") = RNumber THEN  
  726.   
  727. ... 這里是執(zhí)行腳本 ...  
  728.   
  729. end if  
  730.   
  731. objRec.MoveNext  
  732.   
  733. Wend  
  734.   
  735. 這很容易理解。首先,你取出1到500范圍之內(nèi)的一個(gè)隨機(jī)數(shù)(假設(shè)500就是數(shù)據(jù)庫內(nèi)記錄的總數(shù))。  
  736. 然后,你遍歷每一記錄來測試ID 的值、檢查其是否匹配RNumber。滿足條件的話就執(zhí)行由THEN 關(guān)鍵字開始的那一塊代碼。  
  737. 假如你的RNumber 等于495,那么要循環(huán)一遍數(shù)據(jù)庫花的時(shí)間可就長了。  
  738. 雖然500這個(gè)數(shù)字看起來大了些,但相比更為穩(wěn)固的企業(yè)解決方案這還是個(gè)小型數(shù)據(jù)庫了,  
  739. 后者通常在一個(gè)數(shù)據(jù)庫內(nèi)就包含了成千上萬條記錄。這時(shí)候不就死定了?  
  740.   
  741. 采用SQL,你就可以很快地找出準(zhǔn)確的記錄并且打開一個(gè)只包含該記錄的recordset,如下所示:  
  742.   
  743. Randomize  
  744.   
  745. RNumber = Int(Rnd*499) + 1  
  746.   
  747. SQL = "SELECT * FROM Customers WHERE ID = " & RNumber  
  748.   
  749. set objRec = ObjConn.Execute(SQL)  
  750.   
  751. Response.WriteRNumber & " = " & objRec("ID") & " " & objRec("c_email")  
  752.   
  753. 不必寫出RNumber 和ID,你只需要檢查匹配情況即可。只要你對以上代碼的工作滿意,你自可按需操作“隨機(jī)”記錄。  
  754. Recordset沒有包含其他內(nèi)容,因此你很快就能找到你需要的記錄這樣就大大降低了處理時(shí)間。  
  755.   
  756. 再談隨機(jī)數(shù)  
  757.   
  758. 現(xiàn)在你下定決心要榨干Random 函數(shù)的最后一滴油,那么你可能會一次取出多條隨機(jī)記錄或者想采用一定隨機(jī)范圍內(nèi)的記錄。  
  759. 把上面的標(biāo)準(zhǔn)Random 示例擴(kuò)展一下就可以用SQL應(yīng)對上面兩種情況了。  
  760.   
  761. 為了取出幾條隨機(jī)選擇的記錄并存放在同一recordset內(nèi),你可以存儲三個(gè)隨機(jī)數(shù),然后查詢數(shù)據(jù)庫獲得匹配這些數(shù)字的記錄:  
  762.   
  763. SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR ID = " & RNumber2 & " OR ID = " & RNumber3  
  764.   
  765. 假如你想選出10條記錄(也許是每次頁面裝載時(shí)的10條鏈接的列表),你可以用BETWEEN 或者數(shù)學(xué)等式選出第一條記錄和適當(dāng)數(shù)量的遞增記錄。  
  766. 這一操作可以通過好幾種方式來完成,但是 SELECT 語句只顯示一種可能(這里的ID 是自動生成的號碼):  
  767.   
  768. SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber & " AND " & RNumber & "+ 9"  
  769.   
  770. 注意:以上代碼的執(zhí)行目的不是檢查數(shù)據(jù)庫內(nèi)是否有9條并發(fā)記錄。  
  771.   
  772. 隨機(jī)讀取若干條記錄,測試過  
  773.   
  774. Access語法:SELECT top 10 * From 表名 ORDER BY Rnd(id)  
  775.   
  776. Sql server:select top n * from 表名 order by newid()  
  777.   
  778. mysql select * From 表名 Order By rand() Limit n  
  779.   
  780. Access左連接語法(最近開發(fā)要用左連接,Access幫助什么都沒有,網(wǎng)上沒有Access的SQL說明,只有自己測試, 現(xiàn)在記下以備后查)  
  781.   
  782. 語法 select table1.fd1,table1,fd2,table2.fd2 From table1 left join table2 on table1.fd1,table2.fd1 where ...  
  783.   
  784. 使用SQL語句 用...代替過長的字符串顯示  
  785.   
  786. 語法:  
  787.   
  788. SQL數(shù)據(jù)庫:select case when len(field)>10 then left(field,10)+'...' else field end as news_name,news_id from tablename  
  789.   
  790. Access數(shù)據(jù)庫:SELECT iif(len(field)>2,left(field,2)+'...',field) FROM tablename;  
  791.   
  792. Conn.Execute說明  
  793.   
  794. Execute方法  
  795.   
  796. 該方法用于執(zhí)行SQL語句。根據(jù)SQL語句執(zhí)行后是否返回記錄集,該方法的使用格式分為以下兩種:  
  797.   
  798. 1.執(zhí)行SQL查詢語句時(shí),將返回查詢得到的記錄集。用法為:  
  799.   
  800. Set 對象變量名=連接對象.Execute("SQL 查詢語言")  
  801.   
  802. Execute方法調(diào)用后,會自動創(chuàng)建記錄集對象,并將查詢結(jié)果存儲在該記錄對象中,通過Set方法,將記錄集賦給指定的對象保存,以后對象變量就代表了該記錄集對象。  
  803.   
  804. 2.執(zhí)行SQL的操作性語言時(shí),沒有記錄集的返回。此時(shí)用法為:  
  805.   
  806. 連接對象.Execute "SQL 操作性語句" [, RecordAffected][, Option]  
  807.   
  808. ·RecordAffected 為可選項(xiàng),此出可放置一個(gè)變量,SQL語句執(zhí)行后,所生效的記錄數(shù)會自動保存到該變量中。通過訪問該變量,就可知道SQL語句隊(duì)多少條記錄進(jìn)行了操作。  
  809.   
  810. ·Option 可選項(xiàng),該參數(shù)的取值通常為adCMDText,它用于告訴ADO,應(yīng)該將Execute方法之后的第一個(gè)字符解釋為命令文本。通過指定該參數(shù),可使執(zhí)行更高效。  
  811.   
  812. ·BeginTrans、RollbackTrans、CommitTrans方法  
  813.   
  814. 這三個(gè)方法是連接對象提供的用于事務(wù)處理的方法。BeginTrans用于開始一個(gè)事物;RollbackTrans用于回滾事務(wù);CommitTrans用于提交所有的事務(wù)處理結(jié)果,即確認(rèn)事務(wù)的處理。  
  815.   
  816. 事務(wù)處理可以將一組操作視為一個(gè)整體,只有全部語句都成功執(zhí)行后,事務(wù)處理才算成功;若其中有一個(gè)語句執(zhí)行失敗,則整個(gè)處理就算失敗,并恢復(fù)到處里前的狀態(tài)。  
  817.   
  818. BeginTrans和CommitTrans用于標(biāo)記事務(wù)的開始和結(jié)束,在這兩個(gè)之間的語句,就是作為事務(wù)處理的語句。  
  819. 判斷事務(wù)處理是否成功,可通過連接對象的Error集合來實(shí)現(xiàn),若Error集合的成員個(gè)數(shù)不為0,則說明有錯(cuò)誤發(fā)生,事務(wù)處理失敗。  
  820. Error集合中的每一個(gè)Error對象,代表一個(gè)錯(cuò)誤信息。  
  821.   
  822. SQL語句大全精要  
  823.   
  824. DELETE語句  
  825.   
  826. DELETE語句:用于創(chuàng)建一個(gè)刪除查詢,可從列在 FROM 子句之中的一個(gè)或多個(gè)表中刪除記錄,且該子句滿足 WHERE 子句中的條件,可以使用DELETE刪除多個(gè)記錄。  
  827.   
  828. 語法:DELETE [table.*] FROM table WHERE criteria  
  829.   
  830. 語法:DELETE * FROM table WHERE criteria='查詢的字'  
  831.   
  832. 說明:table參數(shù)用于指定從其中刪除記錄的表的名稱。  
  833.   
  834. criteria參數(shù)為一個(gè)表達(dá)式,用于指定哪些記錄應(yīng)該被刪除的表達(dá)式。  
  835.   
  836. 可以使用 Execute 方法與一個(gè) DROP 語句從數(shù)據(jù)庫中放棄整個(gè)表。不過,若用這種方法刪除表,將會失去表的結(jié)構(gòu)。  
  837. 不同的是當(dāng)使用 DELETE,只有數(shù)據(jù)會被刪除;表的結(jié)構(gòu)以及表的所有屬性仍然保留,例如字段屬性及索引。  
  838.   
  839. UPDATE  
  840.   
  841. 有關(guān)UPDATE,急!!!!!!!!!!!  
  842.   
  843. 在ORACLE數(shù)據(jù)庫中  
  844.   
  845. 表 A ( ID ,FIRSTNAME,LASTNAME )  
  846.   
  847. 表 B( ID,LASTNAME)  
  848.   
  849. 表 A 中原來ID,FIRSTNAME兩個(gè)字段的數(shù)據(jù)是完整的  
  850.   
  851. 表 B中原來ID,LASTNAME兩個(gè)字段的數(shù)據(jù)是完整的  
  852.   
  853. 現(xiàn)在要把表 B中的LASTNAME字段的相應(yīng)的數(shù)據(jù)填入到A表中LASTNAME相應(yīng)的位置。兩個(gè)表中的ID字段是相互關(guān)聯(lián)的。  
  854.   
  855. update a set a.lastname=(select b.lastname from b where a.id=b.id)  
  856.   
  857. 常用sql語句命令的作用  
  858. 1. 查看數(shù)據(jù)庫的版本          
  859.   
  860.    select @@version   
  861.   
  862.   2. 查看數(shù)據(jù)庫所在機(jī)器操作系統(tǒng)參數(shù)          
  863.   
  864.   exec master..xp_msver   
  865.   
  866.   
  867.   3. 查看數(shù)據(jù)庫啟動的參數(shù)           
  868.   
  869.   sp_configure   
  870.   
  871.   
  872.   4. 查看數(shù)據(jù)庫啟動時(shí)間           
  873.   
  874.   select convert(varchar(30),login_time,120) from master..sysprocesses where spid=1   
  875.   
  876.   查看數(shù)據(jù)庫服務(wù)器名和實(shí)例名   
  877.   
  878.   print 'Server Name...............:' + convert(varchar(30),@@SERVERNAME)           
  879.   
  880.   print 'Instance..................:' + convert(varchar(30),@@SERVICENAME)     
  881.           
  882.   5. 查看所有數(shù)據(jù)庫名稱及大小       
  883.   
  884.   sp_helpdb   
  885.   
  886.   重命名數(shù)據(jù)庫用的SQL   
  887.   
  888.   sp_renamedb 'old_dbname', 'new_dbname'   
  889.   
  890.   
  891.   6. 查看所有數(shù)據(jù)庫用戶登錄信息       
  892.   
  893.   sp_helplogins   
  894.   
  895.   查看所有數(shù)據(jù)庫用戶所屬的角色信息          
  896.   
  897.   sp_helpsrvrolemember   
  898.   
  899.   修復(fù)遷移服務(wù)器時(shí)孤立用戶時(shí),可以用的fix_orphan_user腳本或者LoneUser過程   
  900.   
  901.   更改某個(gè)數(shù)據(jù)對象的用戶屬主   
  902.     
  903.   sp_changeobjectowner [@objectname =] 'object', [@newowner =] 'owner'   
  904.   
  905.   注意:更改對象名的任一部分都可能破壞腳本和存儲過程。   
  906.   
  907.   把一臺服務(wù)器上的數(shù)據(jù)庫用戶登錄信息備份出來可以用add_login_to_aserver腳本   
  908.   
  909.   查看某數(shù)據(jù)庫下,對象級用戶權(quán)限   
  910.   
  911.   sp_helprotect   
  912.   
  913.   
  914.   7. 查看鏈接服務(wù)器              
  915.     
  916.   sp_helplinkedsrvlogin   
  917.   
  918.   查看遠(yuǎn)端數(shù)據(jù)庫用戶登錄信息  
  919.     
  920.   sp_helpremotelogin   
  921.   
  922.   
  923.   8.查看某數(shù)據(jù)庫下某個(gè)數(shù)據(jù)對象的大小   
  924.   
  925.   sp_spaceused @objname   
  926.   
  927.   還可以用sp_toptables過程看最大的N(默認(rèn)為50)個(gè)表   
  928.   
  929.   查看某數(shù)據(jù)庫下某個(gè)數(shù)據(jù)對象的索引信息   
  930.   
  931.   sp_helpindex @objname   
  932.   
  933.   還可以用SP_NChelpindex過程查看更詳細(xì)的索引情況   
  934.   
  935.   SP_NChelpindex @objname   
  936.   
  937.   clustered索引是把記錄按物理順序排列的,索引占的空間比較少。    
  938.   
  939.   對鍵值DML操作十分頻繁的表我建議用非clustered索引和約束,fillfactor參數(shù)都用默認(rèn)值。   
  940.   
  941.   查看某數(shù)據(jù)庫下某個(gè)數(shù)據(jù)對象的的約束信息   
  942.   
  943.   sp_helpconstraint @objname  
  944.   
  945. 9.查看數(shù)據(jù)庫里所有的存儲過程和函數(shù)   
  946.   
  947.   
  948.   use @database_name   
  949.   
  950.   
  951.   sp_stored_procedures   
  952.   
  953.   
  954.   查看存儲過程和函數(shù)的源代碼   
  955.   
  956.   
  957.   sp_helptext '@procedure_name'   
  958.   
  959.   
  960.   查看包含某個(gè)字符串@str的數(shù)據(jù)對象名稱   
  961.   
  962.   
  963.   select distinct object_name(id) from syscomments where text like '%@str%'   
  964.   
  965.   
  966.   創(chuàng)建加密的存儲過程或函數(shù)在AS前面加WITH ENCRYPTION參數(shù)   
  967.   
  968.   
  969.   解密加密過的存儲過程和函數(shù)可以用sp_decrypt過程   
  970.   
  971.   
  972.   
  973.   10.查看數(shù)據(jù)庫里用戶和進(jìn)程的信息   
  974.   
  975.   sp_who   
  976.   
  977.   查看SQL Server數(shù)據(jù)庫里的活動用戶和進(jìn)程的信息   
  978.   
  979.   sp_who 'active'   
  980.   
  981.   查看SQL Server數(shù)據(jù)庫里的鎖的情況   
  982.   
  983.   sp_lock   
  984.   
  985.   進(jìn)程號1--50是SQL Server系統(tǒng)內(nèi)部用的,進(jìn)程號大于50的才是用戶的連接進(jìn)程.   
  986.     
  987.   spid是進(jìn)程編號,dbid是數(shù)據(jù)庫編號,objid是數(shù)據(jù)對象編號   
  988.   
  989.   查看進(jìn)程正在執(zhí)行的SQL語句   
  990.   
  991.   dbcc inputbuffer ()   
  992.   
  993.   推薦大家用經(jīng)過改進(jìn)后的sp_who3過程可以直接看到進(jìn)程運(yùn)行的SQL語句   
  994.   
  995.   sp_who3   
  996.   
  997.   檢查死鎖用sp_who_lock過程   
  998.   
  999.   sp_who_lock   
  1000.                  
  1001.   11.查看和收縮數(shù)據(jù)庫日志文件的方法   
  1002.   
  1003.   查看所有數(shù)據(jù)庫日志文件大小             
  1004.   
  1005.   dbcc sqlperf(logspace)   
  1006.   
  1007.   如果某些日志文件較大,收縮簡單恢復(fù)模式數(shù)據(jù)庫日志,收縮后@database_name_log的大小單位為M   
  1008.   
  1009.   backup log @database_name with no_log   
  1010.   
  1011.   dbcc shrinkfile (@database_name_log, 5)   
  1012.   
  1013.   
  1014.   12.分析SQL Server SQL 語句的方法:  
  1015.   
  1016.   set statistics time {on | off}   
  1017.   
  1018.   set statistics io {on | off}   
  1019.   
  1020.   圖形方式顯示查詢執(zhí)行計(jì)劃   
  1021.   
  1022.   在查詢分析器->查詢->顯示估計(jì)的評估計(jì)劃(D)-Ctrl-L    或者點(diǎn)擊工具欄里的圖形   
  1023.   
  1024.   文本方式顯示查詢執(zhí)行計(jì)劃   
  1025.   
  1026.   set showplan_all {on | off}   
  1027.   
  1028.   set showplan_text { on | off }   
  1029.   
  1030.   set statistics profile { on | off }   
  1031.   
  1032.   
  1033.   13.出現(xiàn)不一致錯(cuò)誤時(shí),NT事件查看器里出3624號錯(cuò)誤,修復(fù)數(shù)據(jù)庫的方法   
  1034.   先注釋掉應(yīng)用程序里引用的出現(xiàn)不一致性錯(cuò)誤的表,然后在備份或其它機(jī)器上先恢復(fù)然后做修復(fù)操作   
  1035.   
  1036.   alter database [@error_database_name] set single_user   
  1037.   
  1038.   修復(fù)出現(xiàn)不一致錯(cuò)誤的表   
  1039.   
  1040.   dbcc checktable('@error_table_name',repair_allow_data_loss)   
  1041.   
  1042.   或者可惜選擇修復(fù)出現(xiàn)不一致錯(cuò)誤的小型數(shù)據(jù)庫名   
  1043.   
  1044.   dbcc checkdb('@error_database_name',repair_allow_data_loss)   
  1045.   
  1046.   alter database [@error_database_name] set multi_user   
  1047.   
  1048.   CHECKDB 有3個(gè)參數(shù):  
  1049.   
  1050.   repair_allow_data_loss 包括對行和頁進(jìn)行分配和取消分配以改正分配錯(cuò)誤、結(jié)構(gòu)行或頁的錯(cuò)誤,以及刪除已損壞的文本對象,這些修復(fù)可能會導(dǎo)致一些數(shù)據(jù)丟失。   
  1051.   
  1052.   修復(fù)操作可以在用戶事務(wù)下完成以允許用戶回滾所做的更改。   
  1053.   
  1054.   如果回滾修復(fù),則數(shù)據(jù)庫仍會含有錯(cuò)誤,應(yīng)該從備份進(jìn)行恢復(fù)。   
  1055.   
  1056.   如果由于所提供修復(fù)等級的緣故遺漏某個(gè)錯(cuò)誤的修復(fù),則將遺漏任何取決于該修復(fù)的修復(fù)。   
  1057.   
  1058.   修復(fù)完成后,請備份數(shù)據(jù)庫。    
  1059.   
  1060.   repai*_**st 進(jìn)行小的、不耗時(shí)的修復(fù)操作,如修復(fù)非聚集索引中的附加鍵。   
  1061.   
  1062.   這些修復(fù)可以很快完成,并且不會有丟失數(shù)據(jù)的危險(xiǎn)。    
  1063.   
  1064.   repair_rebuild 執(zhí)行由 repai*_**st 完成的所有修復(fù),包括需要較長時(shí)間的修復(fù)(如重建索引)。   
  1065.   
  1066.   執(zhí)行這些修復(fù)時(shí)不會有丟失數(shù)據(jù)的危險(xiǎn)。  



    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多