前言
這個是我工作兩年多后,再次從最基礎的SQL入門開始,認真的學一遍SQL Server,撿漏和鞏固都有;因為自己剛開始學的時候,總是心煩氣躁,最近換工作,發現1到2年經驗,問到基礎性的東西還是很多,這個時候需要的是扎實的基礎功夫,所以一系列打擊+反省后,自己節假日在家從最基礎重新認識一下SQL Server,繼續沉淀一下.哪里有不對或需深入探討,請直接留言或者小窗我;歡迎~
自己學習筆記,轉載請注明出處,謝謝!---酸菜
(一) 數據庫簡介 SQL Server環境配置 數據庫基礎知識
1.什么是數據庫,數據庫有哪些特點,為什么要用數據庫?
數據庫是一種數據庫管理軟件,需要安裝在電腦的操作系統上的;
數據管理系統(DBMS):DataBaseManagementSystem
數據庫具有特點:
① 海量存儲數據;
②查詢速度快;
③控制並發性訪問;
④安全性;
⑤數據的完整性;
2.不同的數據庫,不同的特點
mySql:功能簡單,速度很快,數據不夠嚴謹;
MSSQL Server:只能運行在Windows平台上,與.net有很好的結合,比mySql功能多,但是對大數據量處理不是特別好;
Oracle:
SQLLite:
Access:文件級數據庫;
3.數據庫概念知識
數據庫(DataBase):不同類的數據放到不同的數據庫中;便於對數據的類別個性化管理;安全性高;避免命名沖突;
表(Table):關系型數據庫的關系指的是表;
列(Column)/字段(Field)/行(Row)元祖;
主鍵(Primary Key):數據行中唯一標識,一個表中只能有一個主鍵;分為:邏輯主鍵和業務主鍵;
邏輯主鍵:沒有任何業務意義的字段,完全是給程序看的字段;
業務主鍵:使用對業務有意義的字段,比如身份號/學號...;
主鍵須有的特點:
①不允許空的列為主鍵;
②沒有重復數據的列;
③沒有實際業務邏輯的列;(邏輯主鍵)
④穩定的列;(列中的數據不會經常變化的)
⑤選擇單列為主鍵;(當需要多列來共同唯一標識一個表中的一條記錄時,可選擇多列組成一個主鍵,此時可以稱為:組合主鍵/復合主鍵/聯合主鍵)一般 不推薦使用組合主鍵;
數據冗余的問題:
造成了存儲空間的浪費;
更新/刪除 數據異常;
為了處理數據冗余的問題,需要將這樣的表拆分為兩個或者多個表來儲存,這個時候需要用主外鍵將幾個表的數據聯合起來.
外鍵(Foreign Key),如何利用主外鍵將表中的數據聯合起來?
當數據拆分為兩個表來儲存的時候, 每張表有它自己的主鍵.其中一張表除了它的主鍵還有一個列,這個列用來引用另一張表中的主鍵,這一列就是這張表的"外鍵列",有外鍵列的表叫做"外鍵表",主鍵被引用的表叫做"主鍵表".
因為外鍵列的數據引用的是另一張表的主鍵列數據,所以外鍵列的數據不可以隨便填寫,必須是另一張表的主鍵已經存在的數據.
4.SQL Server的安裝和環境配置
安裝過程網上有對應版本的圖解教程,這里我就先不寫了;
安裝完后,需要啟動SQL Server服務:
開始→運行→services.msc 然后找到對應的需要啟動的服務;
查看數據庫版本語句:Print @@Version;
5.SQL Server安裝失敗,如何干凈的卸載掉;
①在程序卸載目錄中,卸載掉所有帶有SQL Server字樣的程序;
②刪除所有安裝目錄;
③刪除注冊表:開始→運行→regedit;在CURRENT_USER和LOCAL_MACHINE下的SoftWare下的微軟項目中的帶有SQL Server的都刪除掉;
6.通過設計器創建數據庫和表;
①每個數據庫都有且只有一個主數據文件(.mdf),日志文件(_log.ldf);任意多個次要數據文件(.ndf),多個事務日志文件;
②文件組:可將多個數據文件邏輯分到一組,方便日后管理維護(備份/將表建立在對應文件組上等);
③分離:對要分離的數據庫,右擊,分離,刪除鏈接;
④附加:右擊數據庫,選擇附加,找到目錄下的數據庫文件;
⑤脫機:暫時不用這個數據庫,右擊脫機,還在原來的目錄,需要恢復,右擊聯機;
⑥生成兼容腳本移動數據庫:右擊數據庫→任務→生成腳本,可選生成向下版本,可選項根據需求;
注:<1>附加和分離是在數據庫版本是一樣的情況下進行的,不同版本是會出錯;
<2>報錯:"不允許保存更改.您所做的更改要求刪除並重新創建以下表.您對無法重新創建的表進行了更改或者啟用了"阻止保存要求重新創建表的更改"選項";解決方法:工具→選項→Designer/設計→ 勾去 阻止保存要求重新創建表的更改;
<3>報錯:附加數據庫時報錯"..拒絕訪問..";權限問題,設置數據庫文件安全為:Everyone;
<4>低版本向高版本是兼容的,高版本向低版本是不兼容的;
7.數據庫的數據類型;
①image:用來存儲 byte[]類型;
②字符串類型:char,nchar,varchar,nvarchar,text,ntext,varchar(max),nvarchar(max)都屬於字符串類型,下面是對應的區別;
<1>帶n和不帶n的區別:
char: char(2),表示可以存儲2個字節,比如:ab,12,趙;
nchar:nchar(2),表示可以存儲兩個字符,每個字符占用2個字節,比如:貂蟬,ab,12;
總結:
不帶n:存儲中文占用2個字節;存儲數字/英文等占用1個字節;
帶n:無論存儲中文/英文/數字,每個字符都占用2個字節;
帶n的數據類型最長4000,nchar(4000)/nvarchar(4000);
不帶n的數據類型最長是8000,char(8000)/varchar(8000);
<2>帶var和不帶var的區別:
char(10): 1 ;
1111111111;
varchar(10): 1;
1111111111;
總結:
不帶var:固定長度,存儲1個字符,也要占用10個字節,會自動補9個空格,占滿10個字節;
帶var:可變長度,會根據實際存儲的字符大小動態重新分配存儲空間,相對節省存儲空間;
10,表示存儲最大10個字節,無論是固定長度還是可變長度,超過后都會報錯;
<3>大字符串存儲時:
SQL 2005前用:text和ntext;
SQL 2005后用:varchar(max)/nvarchar(max);max表示4GB內存;
注:①對於雙字節字符,用nvarchar解決;
③bit類型:在程序中和查詢語句中bit的類型的值都是1(true)和0(false),但是在設計器中必須輸入true/false;
注:詳細的數據類型文檔,在 幫助→索引中搜索"數據類型 [SQL Server]"都會有詳細的解釋文檔;
8.數據庫的5個系統數據庫
①master:記錄SQL Server系統的所有系統級信息.例如:登錄賬戶信息,鏈接服務器和系統配置設置,記錄其他所有數據庫的存在,數據文件的位置,SQL Server的初始化信息等,如果master不存在,無法啟動SQL Server;
②msdb:用於SQL Server代理計划警報和作業,數據庫定時執行某些操作,數據庫郵件等;
③model:用作於SQL Server實例上創建的所有數據庫的模板.對model數據庫的修改(數據庫大小/排序規則/恢復模式/其他數據庫選項)將應用於以后創建的所有的數據庫.在model中創建一張表,以后創建其他數據庫都默認有一張同樣的表;
④tempdb:一個工作空間,用於保存臨時對象或中間集.一個全局資源,可供鏈接到SQL Server的所有實例用戶使用.每次啟動SQL Server時都會重新創建tempdb;
⑤Resource:一個只讀數據庫.包含SQL Server包括的系統對象.系統對象在物理上保留在Resource數據庫中, 但在邏輯上顯示在每個數據庫的sys架構中.