SQL Server數據庫學習總結

通過一段時間的學習,也對數據庫有了一些認識,數據庫基本是由表,關係,操做組成;對於初學者首先要學的
 
 
一圖勝「十」言:SQL Server 數據庫總結 

一個大概的總結 

通過一段時間的學習,也對數據庫有了一些認識。 
  數據庫基本是由表,關係,操做組成;對於初學者首先要學的: 

   1.數據庫是如何存儲數據的 
    表,約束,觸發器 
   2.數據庫是如何操做數據的 
    insert,update,delete T-sql 函數 存儲過程 觸發器 
   3.數據庫是如何顯示數據的 
    select 

SQLServer數據庫學習總結 

1.SQL基礎 
SQL Server2000安裝、配置,服務器啓動、中止,企業管理器、查詢分析器 
第一代數據庫--網狀數據庫和層次數據庫;第二代數據庫--關係數據庫 
數據庫(DB);數據庫管理系統(DBMS);數據庫系統(DBS) 
SQL Server 2000 提供了不一樣版本:企業版、標準版、我的版、開發版 

SQL Server中的數據類型:整數:int,smallint,tinyint,bigint;浮點數:real,float,decimal;二進制:binary,varbinary;邏輯:bit;字符:char,nchar,varchar,nvarchar;文本和圖形:text,ntext,image;日期和時間:datetime,smalldatetime;貨幣:money,smallmoney 

數據庫的建立和刪除;數據庫表的建立、修改和刪除 

數據完整性:實體完整性:Primary Key,Unique Key,Unique Index,Identity Column;域完整性:Default,Check,Foreign Key,Data type,Rule;參照完整性:Foreign Key,Check,Triggers,Procedure;用戶定義完整性:Rule,Triggers,Procedure;Create Table中得所有列級和表級約束 

SQL Server中有5種約束:主鍵約束(Primary Key Constraint)、默認約束(Default Constraint)、檢查約束(Check Constraint)、惟一性約束(Unique Constraint)、外鍵約束(Foreign Key Constraint). 

關係圖 

數據庫設計的步驟:需求分析、概念結構設計、邏輯結構設計、數據庫物理設計、數據庫實施、數據庫運行和維護 

兩個實體之間的聯繫:一對一(1:1)、一對多(1:n)、多對多(m:n) 

實體關係模型 -- E-R圖 

數據庫規範化:將數據庫的結構精簡爲最簡單的形式;從表中刪除冗餘列;標識全部依賴於其餘數據庫的數據。 

數據庫三範式:第一範式就是無重複的列;第二範式就是非主屬性非部分依賴於主關鍵字;第三範式就是屬性不依賴於其餘非主屬性 

2.SQL語句 
SQL全稱是「結構化查詢語言(Structured Query Language)」 

SQL的4個部分: 
數據定義語言DDL(Data Definition Language)用來定義數據的結構:create、alter、drop。 
數據控制語言DCL(Data Control Language)用來控制數據庫組件的存取許可、存取權限等得命令:grant、revoke。 
數據操縱語言DML(Data Manipulation Language)用來操縱數據庫中得數據的命令:insert、update、delete。 
數據查詢語言DQL(Data Query Language)用來查詢數據庫中得數據的命令:select。 

SQL中得運算符:算術運算符、位運算符、比較運算符、邏輯運算符、通配運算符、字符串鏈接符、賦值運算符 

3.查詢 
簡單查詢,使用TOP子句 
查詢結果排序order by 
帶條件的查詢where,使用算術表達式,使用邏輯表達式,使用between關鍵字,使用in關鍵字, 
模糊查詢like 
在查詢中使用聚合函數:sum(x),avg(x),min(x),max(x),count(x),count(*) 
使用分組查詢group by,having子句 
distinct關鍵字 
列別名 
select top 6 * from sales order by qty desc 
select au_id,au_fname,au_lname from authors where state in('ks','ca','mi') 
select au_fname,au_lname,phone from authors where au_id like '72[234]-%' 
select type,sum(price),avg(price),count(*) from titles group by type having type in('business','psycheology') 


簡單子查詢:嵌套子查詢、相關子查詢;子查詢的select語句中不能使用order by子句,roder by子句只能對最終查詢結果排序。 
嵌套子查詢:執行過程,先執行子查詢,子查詢獲得的結果不被顯示,而是傳給外層查詢,做爲外層查詢的條件,而後執行外層查詢,並顯示結果。 
嵌套子查詢的執行不依賴於外層查詢,子查詢只執行一次。 
帶有比較運算符的子查詢,帶有in和not in的子查詢,帶有any或all的子查詢 
相關子查詢:子查詢爲外層查詢的每一行執行一次,外層查詢將子查詢引用的列的值傳給了子查詢。 
相關子查詢的執行依賴於外層查詢,子查詢須要重複的執行。 
帶有exists和not exists的相關子查詢。 
多表聯接查詢:內聯接(inner join)、外聯接((left、right、full)outer join)、自聯接(self join)和交叉聯接(cross join) 
在查詢上建立新表:select into語句首先建立一個新表,而後用查詢的結果填充新表。 
表別名 
select coursename from course where courseid in(select distinct courseid from grade where grade>10) 
select studname from student where sudbirthday > any (select studbirthday from student where class = '信息系') and class<>'信息系' 
select studname from student where exists (select * from grade where studid = student.studid and courseid = '01') 
select stud1.* from student as stud1 join student as stud2 on stud2.studname = 'mm' and stud1.studsex = stud2.studsex 
select * into girls from student where studsex='m' 

4.視圖、索引和事務 
視圖是由一個或多個數據表(基本表)導出的虛擬表或者查詢表,是關係數據庫系統提供給用戶以多種角度觀察數據庫中數據的重要機制。 
視圖的好處:可以簡化用戶的操做;視圖可以對機密數據提供安全保護。 
建立視圖時,視圖的名稱存在sysobjects表中。有關視圖中所定義列的信息添加到syscolumns表中,而有關視圖相關性的信息添加到sysdepends表中。另外,create view語句的文本添加到syscomments表中。 
在經過視圖向表中插入數據時,若是insert語句列表中包含有視圖中沒有選擇的列和不容許爲空值的列,這種操做是不容許的。 
建立視圖:create view view_employee as select emp_id,fname,lname from employee 
使用視圖:select * from view_employee 
修改視圖:alter view view_employee as select emp_id,fname,job_id from employee where job_id>10
刪除視圖:drop veiw view_employee 
查看視圖結構:exec sp_help view_employee 
查看視圖定義信息:exec sp_helptext 'view_employee' 

索引提供了一種基於一列或多列的值對錶的數據行進行快速訪問的方法。索引提供的是表中得邏輯順序。 
彙集索引基於數據行的鍵值在表內排序和存儲這些數據行。當數據表以某列爲關鍵字創建彙集索引時,表中得數據行就以該列(彙集索引鍵)的排序次序進行存儲。每一個表只能有一個彙集索引。 
非彙集索引具備徹底獨立於數據行的結構,一個表能夠創建多個非彙集索引。 
建立彙集索引:create clustered index studid_ind on stud(studid) 
建立非彙集索引:create unique index studfullname_ind on stud(fname desc,lname) 
刪除索引:drop index stud.studid_ind 
查看stud表上得索引:exec sp_helpindex stud 

事務是一種機制,是一個操做序列,它包含了一組數據庫操做命令,而且全部的命令做爲一個總體一塊兒向系統提交或撤銷操做請求。 
事務的特性:原子性(Atomicity)、一致性(Consistenty)、隔離性(Isolation)、永久性(Durability)。 
事務分類:顯示事務、隱性事務、自動提交事務。 

視圖、索引和事務的建立、使用、修改和刪除 

5.Transact—SQL編程 
全局變量:由系統定義和維護,其名稱以@@字符開頭 
局部變量:由用戶定義和賦值,其名稱以@字符開頭 
輸出語句:print 
邏輯控制語句:begin...end ;break ;case ;continue ; goto ; if...else ;return ; while 
經常使用函數:行集函數,聚合函數,標量函數 
轉換函數:convert(dt,e,s),cast() 
數學函數:絕對值abs(n),向上取整ceiling(n),向下取整floor(n),指定次冪power(n,y),四捨五入round(n,length),求符號sign(n),平方根sqrt(n) 
日期和時間函數:dateadd(datepart,num,date),datediff(datepart,date1,date2),datename(datepart,date),datepart(datepart,date),getdate(),year(date),month(date),day(date) 
字符串函數:lower(e),upper(e),left(e,i),right(e,i),replace(s1,s2,s3)用3替換1中的2,replicate(e,i)重複指定次數,stuff(s1,start,length,s2)用2替換1中指定位置,substring(expression,start,length) 
元數據函數:db_id('database_name'),db_name(datebase_id),object_id('obj_name'),object_name(obj_id),col_length('table','column'),col_name(table_id,col_id) 
聚合函數:avg(expr),count(expr),count(*),max(expr),min(expr),sum(expr) 
select au_lname,au_fname,contory = 
case state 
when 'ut' then 'utah' 
when 'ca' then 'california' 
else 'world' 
end,city from authors order by state desc 

while(select avg(price) from titles)<30 
begin 
update titles set price = price * 2 
if(select max(price) from titles)>50 break 
else continue 
end 
print '價格過高' 

begin 
insert into jobs values('a',80,234) 
if @@error<>0 print '數據插入失敗' 
else goto M 
end 
M:print '數據插入成功' 

6.遊標 
遊標是一種能從包含多條數據記錄的結果集中每次提取一條記錄的機制。將批操做變成行操做,對結果集中得某行進行操做。 
declare author_csr cursor read_only for --定義只讀遊標 
select au_fname,au_lname from authors where state = 'ca' order by au_fname,au_lname 
declare @lname varchar(20),@fname varchar(20) --定義變量 
open author_csr --打開遊標 
fetch next from author_csr into @lname,@fname --執行一次數據讀取操做 
while @@fetch_status=0 --循環遊標讀取數據 
begin 
print 'author name:'+@lname+''+@fname 
fetch next from author_csr into @lname,@fname 
end 
close author_csr --關閉遊標 
deallocate author_csr --釋放遊標 

7.存儲過程 
存儲過程(stored procedure)相似c語言中的函數,是一組爲了完成特定功能的SQL語句集,經編譯後存儲在數據庫中。用戶經過指定存儲過程的名字餅給出參數來執行它。 
經常使用的系統存儲過程:sp_database,sp_helpdb,sp_renamedb,sp_tables,sp_column,sp_help,sp_helpconstraint,sp_helpindex,sp_stored_procedure,sp_password 
建立存儲過程: 
create procedure book_num (@book_name varchar(26),@starttime datetime,@endtime datetime,@total int output) 
as 
select @total=count(jy.askbookid) from book,jyls jy where bookname like @book_name and book.isbn=jy.isbn and jy.starttime>=@starttime and endtime<=@endtime 
使用存儲過程: 
declare @book_name char(26),@total int 
set @book_name='面向對象分析和設計' 
exec book_num @book_name,'2007-01-01','2007-11-01',@total output 
select @book_name as bookname,@total as num 

8.觸發器 
觸發器是一種特殊類型的存儲過程,主要是經過實踐進行觸發而被執行。 
觸發器的主要做用就是可以實現由主鍵和外鍵所不能保證的複雜的參照完整性和數據的一致性。其餘功能:強化約束,跟蹤變化,級聯運行,存儲過程調用。 
SQL Server 2000支持兩種類型觸發器: 
after觸發器:要求只有執行某一操做以後,觸發器才被執行,且只能在表上定義。 
instead of觸發器:表示並不執行其所定義的操做,而僅是執行觸發器自己。既能夠在表上定義,也能夠在視圖上定義,但對同一操做只能定義一個instead of觸發器。 

工做原理: 
當觸發insert觸發器時,新的數據行就會被插入到觸發器表和inserted表中。觸發器經過檢查inserted表來肯定是否執行觸發器動做或如何執行。 
當在定義有觸發器的表上執行update語句時,原始行被移入到deleted表,更新行被移入inserted表。觸發器檢查deleted表和inserted表以及被更新的表,來肯定是否更新了多行以及如何執行觸發器動做。
當觸發deleted觸發器後,從受影響的表中刪除的行將被放置到一個特殊的deleted表中。 

create trigger update_smoke_t_sale on smoke_t_sale for update 
as 
declare @newsalenum int,@smokeproductname varchar(40) 
select @newsalenum= salenum from inserted 
select @smokeproductname=smokeproductname from inserted 
if update(salenum) --判斷是否更新 
begin 
update smoke_t_sale set saletotalprice=@newsalenum * saleprice where smokeproductname=@smokeproductname 
insert into smoke_log(logContent) values('更新成功') 
end 
else 
print '未更新' 

9.數據庫高級管理 
SQL Server安全體系結構,4個等級:客戶機操做系統的安全性,SQL Server的登陸安全性,數據庫的使用安全性,數據對象的使用安全性 
SQL Server驗證模式:windows身份驗證模式和混合模式(windows身份驗證和SQL Server身份驗證)
登陸帳戶:用戶登陸(鏈接)SQL Server服務器的帳戶和密碼。 
角色管理:服務器角色(負責管理和維護SQL Server的組);數據庫角色(是對某個數據庫具備相同訪問權限的用戶帳戶和組的集合) 
數據庫用戶:對於每一個要求訪問數據庫的登陸帳戶,必須在要訪問的數據庫中創建該數據庫的訪問帳戶,且與其登陸帳戶連接關聯,纔可進入該數據庫訪問。 
權限管理:是指用戶是否能進行訪問數據庫資源的相應操做。權限包括:語句權限、對象權限和暗示權限。 

授予權限: 
grant 語句 [...] to 安全帳戶[...] 
grant 權限 [...] on 表或視圖[(列[,...])]|on 存儲過程|on用戶自定義函數 to 安全帳戶[,...] 
拒絕權限: 
deny 語句 [...] to 安全帳戶[...] 
deny 權限 [...] on 表或視圖[(列[,...])]|on 存儲過程|on用戶自定義函數 to 安全帳戶[,...] 
撤銷權限: 
revoke 語句 [...] from 安全帳戶[...] 
revoke 權限 [...] on 表或視圖[(列[,...])]|on 存儲過程|on用戶自定義函數 from 安全帳戶[,...] 

備份和恢復:  數據庫備份設備,在進行數據庫備份以前,首先要建立備份設備。包括:磁盤、磁帶和命名管道  SQL Server 備份策略:只備份數據庫、備份數據庫和事務日誌、差別備份。  backup database medicaldb to disk='medical_bk1' with name='medicaldb backup' description='medicaldb fullbackup' init  restore database medicaldb from medical_bk1  導入導出:  DTS(Data Transformation Service)是SQL Server提供的數據傳輸服務。使用戶能夠未來自徹底不一樣數據源的數據析取、轉換併合併到單個或多個目的。 
相關文章
相關標籤/搜索