SQL基礎之數據庫

1.基礎概念sql

  首先要強調一點,就是咱們的數據庫是由數據庫系統來管理的,咱們登入數據庫並在其上進行操做時最終均要經過數據庫系統來完成。能夠理解成在數據庫上進行操做的是客戶端,數據庫系統是服務端。一個數據庫由具體的數據和數據庫對象組成,可將數據庫當作一個大容器,裏面除了存儲數據還有描述這些數據信息的對象,好比表、視圖、索引等都是這個數據庫裏面的對象。咱們知道數據庫中有4個系統數據庫,它們是數據庫系統在運行過程當中存儲數據和記錄相關信息的重要組成部分。它們的做用以下所示。數據庫

(1)master數據庫,如其名字同樣是SQL裏最重要的數據庫,SQL Server可以正常運行的前提正是這個數據庫未被破壞。它包含系統用戶的配置信息、用戶權限信息等系統配置信息。因爲master數據庫很是重要,所以頗有必要對master數據庫進行備份。服務器

(2)model數據庫,就像在C#中建立的類會自動繼承自object同樣,咱們在數據庫中建立的數據庫也是有一個建立模板的,這個模板就是model數據庫。例如我在model數據庫中新增一個表test,當我隨意建立一個新的數據庫時會發現這個數據庫中已經存在test表了。函數

(3)msdb數據庫,它主要用來存儲運行已建立的計劃做業時有關的描述信息。它也是很是重要的數據庫,通常建議對這個數據庫進行備份。另外對於這個數據庫有不少限制,再加上有不少進程都使用這個數據庫,因此最好不要去對msdb數據庫進行修改。編碼

(4)tempdb數據庫,這個數據庫做爲一個過渡數據庫來存放一些臨時的數據。當SQL Server關閉時這個數據庫也就消失了,當SQL Server重啓時tempdb會被重建。關於tempdb還要注意不能太隨意的建立臨時表,不然當表太多時會致使當前任務沒法執行,而且整個服務器可能沒法工做。spa

  一個數據庫中數據文件和日誌文件,對應的後綴名爲.mdf和.ldf,以mdf結尾的數據文件爲主數據文件。咱們還能夠爲數據庫指定輔助數據文件,它以.ndf結尾,一個數據庫中只能有一個主數據文件,但可有多個輔助數據文件。爲了便於管理和數據的分配,可爲文件指定文件組,一個文件不能同時屬於多個文件組且不能爲日誌文件指定文件組。當建立包含多個文件的文件組時,若將表存入文件組,這樣查詢的時候系統能夠並行的去同時查詢文件組裏的多個文件,這樣能夠提供查找效率縮短期。在SQL2008中可管理的最小物理單位是頁,一頁爲8kb也就是8192字節。8張連續的頁爲一個區,也就是64kb的大小。對於一張表,每一行的數據不可超過一頁,每一頁中除了存放數據還會存放一些文件基本信息,這樣一行數據可佔用的最大空間爲8060個字節。這個規則有一個特殊狀況,那就是列中有nvarchar、varchar的某些文本數據類型能夠超過這一限制。下面是關於數據庫的sql操做。設計

create database dbtest
on primary                   
(
   name=test_maindata,
   filename='d:\test_maindata.mdf',
   size=5,
   filegrowth=10%
 ),
filegroup group1
(
  name=test_data1,
  filename='d:\test_data1.ndf',
  size=2,
  filegrowth=10%
 ),
(
  name=test_data2,
  filename='d:\test_data2.ndf',
  size=2,
  filegrowth=10%
 )
log on    --注意日誌文件不能放入文件組
(
  name=test_log1,
  filename='d:\test_log1.ldf',
  size=2,
  filegrowth=1MB
 ),  
(
  name=test_log2,
  filename='d:\test_log2.ldf',
  size=2,
  filegrowth=2MB
 ) 
 
--查看數據庫的基本信息
select * from sys.databases
--查看有關數據庫文件的信息
select * from sys.database_files
--查看有關數據庫組的信息,這裏顯示了兩行數據,第一行爲mdf文件,第二行爲group1
select * from sys.filegroups
--查看數據庫文件的基本信息和狀態信息
select * from sys.master_files
--查看數據庫的狀態,
select DATABASEPROPERTYEX('dbtest','Status')
--查看空間使用狀況
exec sp_spaceused 
--查看數據庫基本信息,沒有sys.databases信息多
exec sp_helpdb

--修改數據庫的名字,顯然這要慎重
alter database dbtest modify name=hahaha
exec sp_renamedb  'hahaha','dbtest'

--分離數據庫
exec sp_detach_db dbtest
create database dbtest
on
(
  name='test_maindata',
  filename='D:\test_maindata.mdf'
 )
for attach

2.數據庫狀態rest

  數據庫一共包括7種狀態,可使用查詢sys.databases或執行databasepropertyex函數來得到數據庫的狀態信息。日誌

--這兩種方式均可以得到數據庫的狀態信息
select state_desc,* from sys.databases
select databasepropertyex('testDb','Status')

 online:在線狀態或聯機狀態,此時可執行對數據庫的訪問。code

 offline:離線狀態或脫機狀態,數據庫不能正常使用。此時能夠對處於這種狀態的數據庫進行移動和複製操做。

 restoring:還原狀態,數據庫不可用,好比正在還原主文件組的文件,或正在脫機還原一個或多個輔助文件。

 recovering:恢復狀態,數據庫不可用,恢復成功後數據庫會自動處於在線狀態,若是恢復失敗那數據庫將被標記爲可疑狀態。

 suspect:主文件組可疑或已經損壞,SQL Server啓動過程當中沒法恢復數據庫,此時數據庫不可用。

 recovery pending:   恢復未完成狀態,數據庫不可用,這說明SQL Server在恢復過程當中發生了某些與資源相關的錯誤,數據庫未損壞可能須要某些條件讓恢復進程開 始執行。

 emergency:主要用來故障排除,當用戶設置數據庫狀態爲emergency時此數據庫將只讀且爲單用戶模式,禁用日誌記錄,此時只有sysadmin固定服務器的   角色才能訪問,而且也只有sysadmin固定服務器的角色才能設置數據庫的狀態爲emergency。

3.數據類型

  基本數據類型包括數值類型、文本類型、二進制數據類型、日期類型、貨幣類型等。數值類型分爲整型和近似數據類型,整型數據類型有4個,分別是bigint(8字節)、int(4字節)、smallint(2字節)、tinyint(1字節),其中除tinyint外,bigint、int、smallint均可以存儲負數,它們使用最高位做爲符號位,tinyint不能存儲負數,它只能存儲0~255的整數。近似數據類型包括decimal、numeric、real、float,decimal和numeric數據類型是徹底等價的只是名字不同而已,decimal用法爲decimal(p,s),p表示整數部分的長度s表示小數部分的長度,p的取值範圍是0~38,默認是18,s爲0~p之間的數值。因爲decimal精度跨度大,所以爲了更好的利用資源decimal數據類型長度不是固定的,當p小於或等於9時佔5個字節,當p爲38時所佔的字節數將高達17個字節。浮點類型float和real最大的優勢是可以存儲範圍很是大的數字,缺點則是浮點類型容易發生舍入偏差,若是須要進行數據很大的科學計算,但對數據的精度要求不是很嚴格,那麼選擇float或real是比較不錯的選擇。float(n)中的n範圍是1~53,當n爲1~24時,須要4字節存儲,n爲25~53時需8字節存儲。real其實就是float(24),real的數據範圍是-3.40E+38~-1.18E-38,0,1.18E-38~3.40E+38,float的數據範圍是-1.79E+308~-2.23E-308,0,2.23E-308~1.79E+308。

  文本數據類型有char、varchar、text和nchar、nvarchar、ntext六種數據類型,其中前三個爲非Unicode類型,後三個爲Unicode類型。char數據類型存儲數據時一個字符佔用一個字節的存儲空間,它最大可存儲8000個字符,當真實數據長度小於8000時其他字符爲空字符,當真實數據長度大於8000時多餘部分將被截斷。char是固定類型的,爲了更有效率的利用空間,咱們可使用varchar,它與char基本相同惟一的不一樣就是varchar是可變的。text則是爲了解決長度超過8000個字節的文本,它用來存儲長度超過8000個字符的可變文本,最大長度可達2的31次方減1。Unicode爲每種語言的每個字符規定了惟一的二進制編碼,標準狀況下每一個字符佔2個字節,固然還有其餘實現,這就是Unicode Translation Format(Unicode轉換格式,UTF)。這樣nchar的範圍就爲0~4000,但要注意nvarchar的長度除了是0~4000外,還能夠指定nvarchar(max),它的範圍是2的30次方減1,微軟建議設計者儘可能用nvarchar來代替ntext,由於顯然可變的nvarchar比ntext更加節約空間。一樣ntext的範圍也爲2的30次方減1。

  二進制數據類型binary、varbinary、image和文本數據類型同樣的模式,也是建議使用varbinary(max)來代替image。貨幣數據類型由money和smallmoney組成,money由8字節組成,其中4字節存儲整數部分,4字節存儲小數部分。smallmoney則是2字節+字節一共4字節。money和smallmoney小數部分都只有4位,超出部分將進行四捨五入。另外貨幣類型是能夠在數字前面帶¥符號的。對於日期類型,咱們使用不少的就是datetime數據類型了,除此以外還有一個smalldatetime數據類型,smalldatetime表示的時間範圍比datetime要少且精度低。使用datetime有一個不方便的地方就是它既包括日期數據又包括時間數據,而有時候只須要其中一類。強大的SQL Server裏有專門針對日期數據的類型date和專門針對時間數據的類型time。若是需求是datetime類型且但願秒這個單位的小數部分更加精確的話,還可使用datetime2數據類型,小數部分可達7位。

相關文章
相關標籤/搜索