1. 第一章 數(shù)據(jù)庫概述
- 什么是數(shù)據(jù)庫?
數(shù)據(jù)庫是采用計算機技術(shù)統(tǒng)一管理的相關(guān)數(shù)據(jù)的集合,數(shù)據(jù)庫能為各種用戶共享,具有冗余度最小、數(shù)據(jù)之間聯(lián)系密切、有較高數(shù)據(jù)獨立性等特點。 - Microsoft SQL Server 系統(tǒng)的體系結(jié)構(gòu)
Microsoft SQL Server 2008系統(tǒng)由4個主要部分組成,這4個部分被稱為4個服務(wù),這些服務(wù)分別是數(shù)據(jù)庫引擎、分析服務(wù)、報表服務(wù)和集成服務(wù)。
- 數(shù)據(jù)庫引擎(簡稱SSDE):是Microsoft SQL Server 2008系統(tǒng)的核心服務(wù),負責(zé)完成業(yè)務(wù)數(shù)據(jù)的存儲、處理、查詢和安全管理等操作。
- 分析服務(wù)(簡稱SSAS):提供了多維分析和數(shù)據(jù)挖掘功能,可以支持用戶建立數(shù)據(jù)倉庫和進行商業(yè)只能分析。
- 報表服務(wù)(簡稱SSRS):為用戶提供了支持Web的企業(yè)級的報表功能。
- 集成服務(wù)(簡稱SSIS):是一個數(shù)據(jù)集成平臺,可以完成有關(guān)數(shù)據(jù)的提取、轉(zhuǎn)換、加載等。
- 數(shù)據(jù)庫的類型和特點?
Microsoft SQL Server 2008系統(tǒng)提供了兩種類型的數(shù)據(jù)庫,即系統(tǒng)數(shù)據(jù)庫和用戶數(shù)據(jù)庫。
系統(tǒng)數(shù)據(jù)庫主要包括master、model、msdb、Resource和tempdb數(shù)據(jù)庫。
用戶示例數(shù)據(jù)庫主要包括AdventureWorks、AdventureWorksDW、AdventureWorksDW2008、AdventureWorksLT、AdventureWorksLT2008等數(shù)據(jù)庫。
master數(shù)據(jù)庫是最重要的系統(tǒng)數(shù)據(jù)庫
model數(shù)據(jù)庫是一個模板數(shù)據(jù)庫
msdb是與SQLServerAgent服務(wù)相關(guān)的數(shù)據(jù)庫
tempdb是一個臨時數(shù)據(jù)庫,用于存儲查詢過程中所使用的中間數(shù)據(jù)或結(jié)果
- OLTP和OLAP
在OLTP數(shù)據(jù)庫中,數(shù)據(jù)是按照二維表格的形式來存儲的。OLTP數(shù)據(jù)庫的主要作用是降低存儲在數(shù)據(jù)庫中的各種信息的冗余度和加快對數(shù)據(jù)的檢索、插入、更新及刪除速度。典型的OLTP數(shù)據(jù)庫應(yīng)用包括制造企業(yè)的物料管理信息系統(tǒng)、航空公司的機票銷售信息系統(tǒng)、大學(xué)生圖書管理信息系統(tǒng)、銀行的存儲業(yè)務(wù)信息系統(tǒng)等。
OLAP從結(jié)構(gòu)上來看,存儲模型常見的結(jié)構(gòu)式是星型結(jié)構(gòu)或雪崩結(jié)構(gòu)。從使用目的來看,OLAP數(shù)據(jù)庫的主要作用是提高系統(tǒng)對數(shù)據(jù)的檢索和分析速度。 - 管理工具
數(shù)據(jù)庫管理工具主要包括:Microsoft SQL Server Management Studio、SQL Server配置管理工具、SQL Server Profiler、“數(shù)據(jù)庫引擎優(yōu)化顧問”以及大量的命令行實用工具
Microsoft SQL Server Management Studio:將各種圖形化工具和多功能的腳本編輯器組合在一起,完成訪問、配置、控制、管理和開發(fā)SQL Server的所有工作,大大方便了技術(shù)人員和數(shù)據(jù)庫管理員對SQL Server系統(tǒng)的各種訪問。
SQL Server Profiler:可以對Microsoft SQL Server 2008系統(tǒng)的運行過程進行攝錄
- 數(shù)據(jù)庫管理員
作為一個數(shù)據(jù)庫管理員,簡稱DBA,至少應(yīng)該做好以下12項任務(wù):
(1)安裝和配置
(2)容量規(guī)劃
(3)應(yīng)用架構(gòu)設(shè)計
(4)管理數(shù)據(jù)庫對象(表,索引,視圖,存儲過程,函數(shù),觸發(fā)器,同義詞等)
(5)存儲管理空間
(6)安全管理
(7)備份與恢復(fù)
(8)性能監(jiān)視和調(diào)優(yōu)
(9)調(diào)度作業(yè)
(10)網(wǎng)絡(luò)管理
(11)高可用性和高伸縮性
(12)故障解決
2. 第二章 管理安全性
- 管理登錄名
管理登錄名包括創(chuàng)建登錄名、設(shè)置密碼策略、查看登錄名信息及修改和刪除登錄名等。
(1)創(chuàng)建登錄名
create login [將要創(chuàng)建的基于Windows登錄名的登錄名] //方括號必須的
from windows
go
(2)創(chuàng)建有默認數(shù)據(jù)庫的登錄名
create login [將要創(chuàng)建的基于Windows登錄名的登錄名]
from windows
with default_database = AdventureWorks
go
如果沒有為新建的登錄名明確的指出默認數(shù)據(jù)庫,那么默認數(shù)據(jù)庫是master數(shù)據(jù)庫
(3)創(chuàng)建SQL Server登錄名
create login Peter
with password = '11111'
- 維護登錄名
(1)使用alter login 修改登錄名
alter login Peter
with name = roudo
(2)修改roudo登錄名的密碼
alter login roudo
with password = '11111'
(3)禁用和啟用登錄名
//禁用登錄名
alter login roudo disable
//啟用登錄名
alter login roudo enable
- 服務(wù)器角色
固定服務(wù)器角色式服務(wù)級別的主體,他們的作用范圍是整個服務(wù)器
固定服務(wù)器角色已經(jīng)具備了執(zhí)行指定操作的權(quán)限,可以把其他登錄名作為成員添加到固定服務(wù)器角色中。
固定服務(wù)器角色的權(quán)限是固定不變的,既不能被刪除,也不能增加。sysadmin固定服務(wù)器角色擁有的權(quán)限最多,可以執(zhí)行系統(tǒng)中的所有操作。- 如果希望指定的登錄名成為某個固定服務(wù)器角色的成員,可以使用sp_addsrvrolemember存儲過程來完成這種操作,語法如下:
sp_addsrvrolemember ‘login-name’, 'role-name'
- 如果希望指定的登錄名成為某個固定服務(wù)器角色的成員,可以使用is_srvrolemember
- 如果希望把固定服務(wù)器角色的某個成員刪除,可以使用sp_dropsrvrolemember
- 創(chuàng)建用戶
create user
(1)創(chuàng)建登錄名的數(shù)據(jù)庫用戶
create user peter_user
from login peter
(2)創(chuàng)建帶有默認架構(gòu)的數(shù)據(jù)庫用戶
create user bobbie_hrm
from login [ ]
with default_schema = hrmanager
注意:數(shù)據(jù)庫中的每一個用戶可以對應(yīng)多個架構(gòu),但是只能對應(yīng)一個默認架構(gòu)
dbo是數(shù)據(jù)庫的默認用戶
- 管理架構(gòu)
架構(gòu)是形成單個命名空間的數(shù)據(jù)庫實體的集合。架構(gòu)是數(shù)據(jù)庫級的安全對象,是數(shù)據(jù)庫對象的容器。
(1)創(chuàng)建架構(gòu)
create schema
這個語句不僅可以創(chuàng)建架構(gòu),同時還可以創(chuàng)建該架構(gòu)所擁有的表、視圖并且可以對這些對象設(shè)置權(quán)限。
(2)創(chuàng)建有明確所有者的架構(gòu)
create schema SaleManager
authorization peter_user
(3)創(chuàng)建架構(gòu)的同時創(chuàng)建一個表
create schema Manager
authorization peter_user
create table elecTravelHuman(Emp ID INT, EmpName Varchar(126))
(4)創(chuàng)建架構(gòu)的同時創(chuàng)建表和管理權(quán)限
create schema Manager
authorization peter_user
create table elecTravelHuman(Emp ID INT, EmpName Varchar(126))
grant select to guest
- 修改和刪除架構(gòu)
修改架構(gòu)是指將特定架構(gòu)中的對象轉(zhuǎn)移到其他架構(gòu)中
可以使用alter schema語句完成對架構(gòu)的修改 - 數(shù)據(jù)庫角色
管理數(shù)據(jù)庫角色包括創(chuàng)建數(shù)據(jù)庫角色、添加和刪除數(shù)據(jù)庫角色成員、查看數(shù)據(jù)庫角色信息及修改和刪除角色等。
(1)創(chuàng)建簡單的角色
create role
(2)sp_addrolemember為角色添加成員
sp_addrolemember 'role_name', 'security_account'
(3)其他操作
與sp_addrolemember存儲過程相對應(yīng)的是sp_droprolemember存儲過程,后者可以刪除指定數(shù)據(jù)庫角色中的成員。
8. 常用對象的權(quán)限
(1)授予權(quán)限
使用grant語句將安全對象的權(quán)限授予指定的安全主體
grant control to tomson_hrm
對數(shù)據(jù)庫的control權(quán)限授予給了tomson_hrm用戶
grant create table to peter_user
該用戶擁有了可以在當(dāng)前數(shù)據(jù)庫中執(zhí)行創(chuàng)建表的操作
grant create table to cleon with grant option
可以使cleon用戶可以將create table權(quán)限轉(zhuǎn)授給其他用戶。
(2)收回權(quán)限
使用revoke語句可以從某個安全主體處收回權(quán)限
revoke select on sales.customer
from cleon
使用revoke語句收回授予的權(quán)限
3. 第三章 管理數(shù)據(jù)庫
- 數(shù)據(jù)庫文件
一個數(shù)據(jù)庫至少有一個數(shù)據(jù)文件和一個事務(wù)日志文件
數(shù)據(jù)文件用于存放數(shù)據(jù)庫的數(shù)據(jù)和各種對象,而事務(wù)日志文件用于存放事務(wù)日志。一個數(shù)據(jù)庫最多可以擁有32767個數(shù)據(jù)文件和32767個日志文件。 - 創(chuàng)建數(shù)據(jù)庫
具有create database、create any database 或 alter any database權(quán)限的用戶才可以執(zhí)行創(chuàng)建數(shù)據(jù)庫的操作。
(1)創(chuàng)建簡單數(shù)據(jù)庫
create database 名字
(2)使用create database語句創(chuàng)建數(shù)據(jù)庫
create database LCBCom
on {
name = LCBCom_DATA,
filename = 'D:\......',
size = 6,
maxsize = 20,
filegrowth = 10%
}
log on {
name = LCBCom_LOG,
filename = 'D:\....',
size = 2MB,
maxsize = 10MB,
filename = 1MB
}
- 數(shù)據(jù)庫選項
數(shù)據(jù)庫狀態(tài)選項類型:
online(在線狀態(tài)或聯(lián)機狀態(tài))
offline (離線狀態(tài)或脫機狀態(tài))
emergency(緊急狀態(tài),數(shù)據(jù)庫標(biāo)記為read_only,不能只執(zhí)行日志文件,只能由sysadmin固定服務(wù)器角色成員訪問)
控制用戶對數(shù)據(jù)庫訪問選項:
single_user(單用戶模式,一次只能有一個用戶訪問數(shù)據(jù)庫)
restricted_user(限制用戶模式,只能由sysadmin固定服務(wù)器角色成員,db_owner等訪問數(shù)據(jù)庫)
multi_user(多用戶模式,正常狀態(tài),有訪問權(quán)限的用戶都可以訪問數(shù)據(jù)庫) - 修改數(shù)據(jù)庫
alter database
(1)更改數(shù)據(jù)庫名稱
alter database database_name modify name = new database_name
- 管理數(shù)據(jù)庫快照
數(shù)據(jù)快照提供了源數(shù)據(jù)庫在創(chuàng)建快照時刻的只讀、靜態(tài)視圖,可以有效的支持報表數(shù)據(jù)匯總和數(shù)據(jù)分析等只讀操作。
需要說明的是:數(shù)據(jù)庫快照必須與源數(shù)據(jù)庫在同一個服務(wù)器實例上
(1)數(shù)據(jù)庫快照作用
- 提供了一個靜態(tài)的視圖來為報表提供服務(wù)
- 可以利用數(shù)據(jù)庫快照來恢復(fù)數(shù)據(jù)庫
- 和數(shù)據(jù)庫鏡像結(jié)合使用,提供讀寫分離
- 作為測試環(huán)境或數(shù)據(jù)變更前的備份,比如我要大批導(dǎo)入或刪除數(shù)據(jù)前,或是將數(shù)據(jù)提供給測試人員進行測試前,做一個快照,如果出現(xiàn)問題,則可以利用快照恢復(fù)到快照建立時的狀態(tài)
(2)創(chuàng)建數(shù)據(jù)庫快照
create database database_snapshot_name
on (
name = source_database_logical_file_name,
filename = 'os_file_name',
)
as snapshot of source_database_name
RAID它就是將多個獨立的硬盤進行組合,并將其容量疊加在一起,再利用個別硬盤提供數(shù)據(jù)所產(chǎn)生的加成效果,提升整個硬盤系統(tǒng)性能。 同時,還可以通過存儲冗余數(shù)據(jù)來增加容錯能力,以獲得更加安全的數(shù)據(jù)存儲環(huán)境
4. 第四章 T-SQL語言
- T-SQL語言和SQL關(guān)系
SQL Server是結(jié)構(gòu)化查詢語言,是目前關(guān)系型數(shù)據(jù)庫管理系統(tǒng)中使用最廣泛的查詢語言 T-SQL即 Transact-SQL,是標(biāo)準(zhǔn)SQL語言的擴展,是SQL Server的核心,在SQL的的基礎(chǔ)上添加了變量,運算符,函數(shù)和流程控制等新內(nèi)容 - 類型
T-SQL語言分為5種類型:
- 數(shù)據(jù)定義語言(DDL):create、alter、drop
- 數(shù)據(jù)操縱語言(DML):insert、update、delete、select
- 數(shù)據(jù)控制語言(DCL):grant、revoke、deny
- 事務(wù)管理語言(TML):commit、rollback
- 附加的語言元素
- 標(biāo)識符
在T-SQL語言中,數(shù)據(jù)庫對象的名稱就是其標(biāo)識符 - 分割標(biāo)識符
有兩種情況下使用標(biāo)識符:(1)對象名稱中包含了Microsoft SQL Server保留字,例如[where]分割標(biāo)識符;
(2)對象名稱中使用了未列入限定字符的字符,例如[product[1] table]分割標(biāo)識符.
當(dāng)Ouoted_Indentifier選項設(shè)置為on時,才能使用引用的標(biāo)識符 - 變量和常量
- 聲明和賦值
(1)在T-SQL語言中,可以使用declare語句聲明變量。在聲明變量的時候需要注意:第一,為變量指定名稱,且名稱的第一個字符必須為@;第二,指定該變量的數(shù)據(jù)類型和長度;第三,默認情況下將該變量的變量值設(shè)置為NULL。
(2)可以在一個declare語句中聲明多個變量,變量之間使用逗號分割開。變量的作用域是可以引用該變量的Transact-SQL語句的范圍。
(3)有兩種為變量賦值的方式: 使用set語句為變量賦值和使用select語句選擇列表中當(dāng)前所引用值來為白能量賦值。 - 使用變量
declare @yearCounter INT
SET @yearCounter = 1
WHILE (@yearCounter < 2012)
SET @yearCounter = @yearCounter + 1
PRINT @yearCounter
- 錯誤捕捉語言
在T-SQL語言中,可以使用try…catch構(gòu)造和使用@@Error函數(shù)
在T-SQL語句中,可以使用try…catch構(gòu)造來處理T-SQL代碼中的錯誤
5. 第五章 表
- 創(chuàng)建和修改表
create table students(
studentNumber int not null,
studentName varchar(32) not null,
gender char(2) null,
birthday datetime null,
birthplace varchar(32) null,
telphone_no varchar(32) null,
address varchar(128) null,
others varchar(256) null
)
當(dāng)在表名稱前面使用一個#符號時,表示創(chuàng)建的表是本地臨時表,該表只能由創(chuàng)建者使用。如果表名稱前面使用了兩個#符號,那么表示該表是全局臨時表,在其生存期間可以為所有的用戶使用。
2. 增加或刪除列
alter table abc_table
add column_b varchar(20) not null
create table abc_table(
column_a int, column_b varchar(20)null)
alter table abc_table
drop column column_b
- 更改該列的數(shù)據(jù)類型
alter table table_name alter column column_name new_type_name
注意:如果表中沒有數(shù)據(jù),那么對表中列的數(shù)據(jù)類型的更改可以是任意的。但是,如果表中已經(jīng)包含了數(shù)據(jù),對表中列的數(shù)據(jù)類型的更改將涉及到這些列中的數(shù)據(jù)是否能夠與新數(shù)據(jù)類型一致的問題。因此,這時要求更改后的列的數(shù)據(jù)類型應(yīng)該是更改前的數(shù)據(jù)類型可以隱式轉(zhuǎn)換的數(shù)據(jù)類型。
4. 創(chuàng)建和修改標(biāo)識符列
標(biāo)識符列是唯一標(biāo)識表中每一行數(shù)據(jù)的符號。
(1)IDENTITY
作用范圍是表
使用IDENTITY屬性的列是IDENTITY列,每一個表中最多只能有一個IDENTITY列。
IDENTITY(seed, increment)
seed:指定該列的種子值
increment:指定該列的增量值
這兩個值得默認值都是1
可以在create table 語句或alter table語句中使用IDENTITY屬性。由于IDENTITY屬性是作為列得屬性在列上定義,因此對IDENTITY列得數(shù)據(jù)類型有所限制,SQL Server系統(tǒng)要求IDENTITY列得數(shù)據(jù)類型可以是整數(shù)數(shù)據(jù)類型或者是可以轉(zhuǎn)換為整數(shù)數(shù)據(jù)的數(shù)據(jù)類型,并且不允許是空值。
(2)ROWGUIDCOL列
ROWGUIDCOL列是全局唯一標(biāo)識的符號,每一個表中最多允許創(chuàng)建一個ROWGUIDCOL列。ROWGUIDCOL列的值是不能自動生成的,一般使用newId函數(shù)來為該列提供數(shù)據(jù)。
- 已分區(qū)表
如果一個表中包含了大量的、以多種不同方式使用的數(shù)據(jù),一般的查詢又不能按照預(yù)期的成本完成,就應(yīng)該考慮使用已分區(qū)表。已分區(qū)表是指按照數(shù)據(jù)水平方式分區(qū),將數(shù)據(jù)分布于一個數(shù)據(jù)庫的多個不同的文件組中。在對數(shù)據(jù)進行查詢或更新時,這些已分區(qū)表將被視為獨立的邏輯單元。
創(chuàng)建分區(qū)表的主要步驟如下:
- 創(chuàng)建分區(qū)函數(shù),指定如何分區(qū)
- 創(chuàng)建分區(qū)方案,指定分區(qū)函數(shù)的分區(qū)在文件組上的位置
- 創(chuàng)建使用分區(qū)方案的表
6. 第六章 操縱數(shù)據(jù)
- 分組技術(shù)
group by
子句
聚合函數(shù)只能產(chǎn)生一個單一的匯總數(shù)據(jù),使用group by 子句,則可以生成分組的匯總數(shù)據(jù)。group by 子句把數(shù)據(jù)組織起來分成組。
group by 子句,having子句和聚合函數(shù)一起完成對每一個組生成一行和一個匯總值。在使用group by 子句和having子句的過程中,要求考慮下列一些條件:
- 在select子句中的非合計列必須出現(xiàn)在group by 子句中
- 在having子句中的列只返回一個值
- 因為having子句是作為group by子句的條件出現(xiàn)的,所以having子句必須與group by子句同時出現(xiàn),并且必須在group by 子句之后出現(xiàn)。
- group by子句可以包括表達式
- group by all顯示出所有組,甚至那些不滿足where子句條件的組也顯示出來。如果group by all 和having 子句同時出現(xiàn),那么having條件將覆蓋all。
- 連接技術(shù)
- 交叉連接(笛卡爾乘積)
cross join
- 內(nèi)連接
inner join連接運算符和on關(guān)鍵字指定連接條件
- 外連接
left outer join
、right outer join
、full outer join
7. 第七章 索引
-
索引
索引是一種與表或視圖關(guān)聯(lián)的物理結(jié)構(gòu),可以用來加快從表或視圖中檢索數(shù)據(jù)行的速度。 -
為什么創(chuàng)建索引?
(1)創(chuàng)建唯一性索引,可以保證每一行數(shù)的唯一性。
(2)可以大大加快數(shù)據(jù)的檢索速度。
(3)可以加速表和表之間的連接。
(4)在使用group by 和order by子句進行數(shù)據(jù)檢索時,可以顯著減少查詢中分組和排序的時間。
(5)通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能 -
不利之處
(1)創(chuàng)建索引和維護索引要耗費時間
(2)索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間。
(3)對表中的數(shù)據(jù)進行增加、刪除和修改時,索引也要動態(tài)的維護,這樣就降低了數(shù)據(jù)的維護速度。 -
索引的類型和特點
(1)聚集索引和非聚集索引
聚集索引是一種數(shù)據(jù)表的物理順序與索引順序相同的索引,非聚集索引則是一種數(shù)據(jù)表的物理順序與索引順序不相同的索引。當(dāng)創(chuàng)建聚集索引時,應(yīng)該考慮下列因素:
- 每一個表最多只能有一個聚集索引
- 表中行的物理順序和索引中行的順序是相同的
- 索引鍵值的唯一性可以使用unique關(guān)鍵字明確維護,或由一個內(nèi)部的唯一標(biāo)識符明確維護。
- 對于頻繁更改的列不適合創(chuàng)建聚集索引
(2)非聚集索引與聚集索引的區(qū)別?
- 聚集索引一個表只能有一個,而非聚集索引一個表可以存在多個
- 聚集索引存儲記錄是物理上連續(xù)存在,而非聚集索引是邏輯上的連續(xù),物理存儲并不連續(xù)
- 聚集索引:物理存儲按照索引排序;聚集索引是一種索引組織形式,索引的鍵值邏輯順序決定了表數(shù)據(jù)行的物理存儲順序。
- 非聚集索引:物理存儲不按照索引排序;非聚集索引則就是普通索引了,僅僅只是對數(shù)據(jù)列創(chuàng)建相應(yīng)的索引,不影響整個表的物理存儲順序。
- 索引是通過二叉樹的數(shù)據(jù)結(jié)構(gòu)來描述的,我們可以這么理解聚簇索引:索引的葉節(jié)點就是數(shù)據(jù)節(jié)點。而非聚簇索引的葉節(jié)點仍然是索引節(jié)點,只不過有一個指針指向?qū)?yīng)的數(shù)據(jù)塊。
- 非聚集索引與聚集索引的區(qū)別在于非聚集索引的葉子節(jié)點不存儲表中的數(shù)據(jù),而是存儲該列對應(yīng)的主鍵
8. 第八章 數(shù)據(jù)完整性
- 數(shù)據(jù)完整性就是指存儲在數(shù)據(jù)庫中的數(shù)據(jù)的一致性和準(zhǔn)確性。分為3種類型:域完整性、實體完整性和引用完整性。
- 約束的概念和類型
約束是通過限制列中數(shù)據(jù)、行中數(shù)據(jù)和表之間的數(shù)據(jù)來保證數(shù)據(jù)完整性的非常有效的方法。約束可以確保把有效的數(shù)據(jù)輸入到列中并維護表和表之間的特定關(guān)系。系統(tǒng)提供了5種約束類型:
(1)DEFAULT約束
使用create table 語句定義default約束:
create table students(
student ID INT,
studentName VARCHAR(60),
gender CHAR(1) DEFAULT 'M',
birthdate DATETIME,
SSL CHAR(18)
)
使用 alter table 語句定義default約束:
alter table students
ADD constraint D_student_birthdate
DEFAULT '1990-01-01',
FOR birthdate
當(dāng)使用default約束時,需要考慮下列因素:
- 定義的常量值必須與該列的數(shù)據(jù)類型和精度是一致的。
- default約束只能應(yīng)用于insert語句
- 每一個列只能定義一個default約束。
- default約束不能放在有identity屬性的列上或者數(shù)據(jù)類型為timestamp的列上。
(2)CHECK約束
使用create table 語句定義check約束
create table students(
student ID INT,
studentName VARCHAR(60),
gender CHAR(1) DEFAULT 'M' CHECK (gender = 'F' OR gender = 'M'),
birthdate DATETIME,
SSL CHAR(18)
)
使用alter table 語句定義check約束
alter table students
ADD CHECK (birthdate >= '1980-01-01' AND birthdate <= '1990-12-31')
當(dāng)使用檢查約束時,需要考慮下列因素:
- 一個列上可以定義多個check約束
- 執(zhí)行insert 語句或者update 語句時,該約束驗證相應(yīng)的數(shù)據(jù)是否滿足check約束的條件。
- check約束可以參考本表中的其他列
- check約束不能包含子查詢語句
(3)主鍵約束
在create table語句中定義主鍵約束
create table students(
student ID INT PRIMARY KEY,
studentName VARCHAR(60),
gender CHAR(1) DEFAULT 'M' CHECK (gender = 'F' OR gender = 'M'),
birthdate DATETIME,
SSL CHAR(18)
)
定義包含了兩個列的逐漸約束
create table nationalStudents(
university ID INT NOT NULL,
student ID INT NOT NULL,
PRIMARY KEY(university ID, student ID),
studentName VARCHAR(60),
gender CHAR(1)
birthdate DATETIME,
SSL CHAR(18)
)
當(dāng)使用主鍵約束時,應(yīng)該考慮下列因素:
- 每一個表最多只能定義一個主鍵約束
- 主鍵列所輸入的值必須時唯一的
- 主鍵列不允許空值
(4)UNIQUE約束
使用alter table 語句定義unique約束
alter table students
ADD UNIQUE(SSL)
在創(chuàng)建unique約束時,需要考慮下列因素:
- unique約束所在的列允許空值
- 一個表中可以有多個unique約束
- 可以把unique約束放在一個或者多個列上,這些列或列的組合必須有唯一的值
- unique約束強制在指定的列上創(chuàng)建一個唯一性索引
(5)外鍵約束
9. 第九章 視圖
-
視圖的概念
視圖是查看數(shù)據(jù)庫表中數(shù)據(jù)的一種方式,是一個虛擬的表,是一個表中的數(shù)據(jù)經(jīng)過某種篩選后的顯示方式,視圖由一個預(yù)定義的查詢select語句組成。 -
視圖的特點。
視圖中的數(shù)據(jù)并不屬于視圖本身,而是屬于基本的表,對視圖可以像表一樣進行insert,update,delete操作。
視圖不能被修改,表修改或者刪除后應(yīng)該刪除視圖再重建。
視圖的數(shù)量沒有限制,但是命名不能和視圖以及表重復(fù),具有唯一性。
視圖可以被嵌套,一個視圖中可以嵌套另一個視圖。
視圖不能索引,不能有相關(guān)聯(lián)的觸發(fā)器和默認值,sql server不能在視圖后使用order by排序。
- 為什么要使用視圖
①簡化數(shù)據(jù)操作:視圖可以簡化用戶處理數(shù)據(jù)的方式。
②著重于特定數(shù)據(jù):不必要的數(shù)據(jù)或敏感數(shù)據(jù)可以不出現(xiàn)在視圖中。
③視圖提供了一個簡單而有效的安全機制,可以定制不同用戶對數(shù)據(jù)的訪問權(quán)限。
④提供向后兼容性:視圖使用戶能夠在表的架構(gòu)更改時為表創(chuàng)建向后兼容接口。
⑤自定義數(shù)據(jù):視圖允許用戶以不同方式查看數(shù)據(jù)。
⑥導(dǎo)出和導(dǎo)入數(shù)據(jù):可使用視圖將數(shù)據(jù)導(dǎo)出到其他應(yīng)用程序。
- 視圖的類型
SQL server中,一般把視圖分為三類:標(biāo)準(zhǔn)視圖、索引視圖、分區(qū)視圖
.一般情況下我們使用的視圖都是標(biāo)準(zhǔn)視圖
,它是一個虛擬表
,不占物理存儲空間
.如果要提高聚合多行數(shù)據(jù)
的視圖性能,可以創(chuàng)建索引視圖
.索引視圖
是被物理化
的視圖,它包含經(jīng)過計算的物理數(shù)據(jù).使用分區(qū)視圖
可以連接一臺或多臺服務(wù)器中成員表的分區(qū)數(shù)據(jù)
,使得這些數(shù)據(jù)看起來就像來自一個表中一樣. - 創(chuàng)建視圖
create VIEW view_name
as
select_statement
如果希望加密定義文本,可以在定義視圖時使用with encryption 子句
如果不希望更改視圖的基表,可以在定義新視圖時使用with schemabinding子句
刪除視圖:DROP VIEW view_name
10. 第十章 存儲過程、觸發(fā)器
- 存儲過程的特點、類型和作用
-
存儲過程(Stored Procedure)是在大型數(shù)據(jù)庫系統(tǒng)中,一組為了完成特定功能的SQL 語句集,存儲在數(shù)據(jù)庫中,
經(jīng)過第一次編譯后調(diào)用不需要再次編譯
,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。 存儲過程是數(shù)據(jù)庫中的一個重要對象。
(1)存儲過程只在創(chuàng)造時進行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而
一般SQL 語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速
度。
(2)當(dāng)對數(shù)據(jù)庫進行復(fù)雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。
(3)存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量
(4)安全性高,可設(shè)定只有某此用戶才具有對指定存儲過程的使用權(quán) -
存儲過程的類型有3種:用戶定義的存儲過程、擴展存儲過程和系統(tǒng)存儲過程
-
存儲過程的優(yōu)點:
(1)減少網(wǎng)絡(luò)通信量。
(2)執(zhí)行速度更快。
(3)更強的適應(yīng)性。
(4) 分布式工作。
- 創(chuàng)建存儲過程的規(guī)則
(1)使用create procedure語句創(chuàng)建存儲過程
create procedure procedure_name
parameter_name data_type, ...
with producedure_option
as
aql_statement
(2)創(chuàng)建一個簡單的存儲過程
create procedure HumanResources.Get EmployeeFullName
AS
select lastName, firstName, Department
from humanResources, vEmployeeDepartment
(3)創(chuàng)建一個帶參數(shù)的存儲過程
create procedure HumanResources.Get EmployeeInfo
@LastName VARCHAR(50)
@FirstName VARCHAR(50)
AS
SELECT LastName, FirstName, JobTitle, Department
From HumanResources.Get EmployeeFullName
where lastname = @lastname
AND firstname = @firstname
(3)創(chuàng)建帶有output類型參數(shù)的存儲過程
create procedure dbo.ComputePlus
@FirstPara decimal(10, 2),
@SecondPara decimal(10, 2),
@PlusResult decimal(10,2) output
AS
SET @PlusResult = @FirstPara + @SecondPara
- 執(zhí)行存儲過程
execute
語句執(zhí)行存儲過程
(1)執(zhí)行簡單的存儲過程
EXEC HumanResources.Get EmployeeFullName
(2)為存儲過程直接提供參數(shù)值
EXEC HumanResources.Get EmployeeInfo
'Glimp', 'Diane'
(3)為存儲過程間接提供參數(shù)值
declare @LastName VARCHAR(50)
declare @FirstName VARCHAR(50)
set @LastName = 'Glimp'
set @FirstName = 'Diane'
EXEC HumanResources.Get EmployeeInfo
@LastName, @FirstName
(4)使用output參數(shù)執(zhí)行存儲過程
declare @result decimal(10, 2)
EXEC dbo.ComputePlus 123, 568, @result output
print @result
- 修改和刪除存儲過程
(1)刪除存儲過程
drop procedure HumanResources.Get EmployeeInfo
(2)修改存儲過程文章來源:http://www.zghlxwxcb.cn/news/detail-453379.html
alter procedure
- 存儲過程的執(zhí)行過程
存儲過程創(chuàng)建之后,在第一次執(zhí)行時需要經(jīng)過語法分析階段、解析階段、編譯階段和執(zhí)行階段。 - 查看存儲過程的信息
object_definition
- 觸發(fā)器
(1)創(chuàng)建DML觸發(fā)器
create trigger trigger_name
on table_name_or_view_name
with encryption
{for|after|instend of}{[delete][,][insert][,][update]}
as sql_statement
(2)創(chuàng)建DDL觸發(fā)器文章來源地址http://www.zghlxwxcb.cn/news/detail-453379.html
create trigger trigger_name
on {all server|database}
with encryption
{for|after}{event_type}
as sql_statement
第十一章 備份和還原
- 數(shù)據(jù)的恢復(fù)模式
- 完整恢復(fù)模式(等級最高)
- 大容量日志記錄恢復(fù)模式
- 簡單恢復(fù)模式
- 備份有四種方式
- 全備份:創(chuàng)建備份完成時數(shù)據(jù)庫內(nèi)存在的數(shù)據(jù)的副本;
- 差異備份:只記錄自上次數(shù)據(jù)庫備份后發(fā)生更改的數(shù)據(jù)。 差異數(shù)據(jù)庫備份比數(shù)據(jù)庫備份小,而且備份速度快,因此可以更經(jīng)常地備份,經(jīng)常備份將減少丟失數(shù)據(jù)的危險;
- 日志備份:是自上次備份事務(wù)日志后對數(shù)據(jù)庫執(zhí)行的所有事務(wù)的一系列記錄。 可以使用事務(wù)日志備份將數(shù)據(jù)庫恢復(fù)到特定的即時點(如輸入多余數(shù)據(jù)前的那一點)或恢復(fù)到故障點;
- 文件組備份:可以備份和還原數(shù)據(jù)庫中的個別文件。 可以只還原已損壞的文件,而不用還原數(shù)據(jù)庫的其余部分,從而加快了恢復(fù)速度。
- 備份的動態(tài)特點
- 檢查點機制檢查數(shù)據(jù)庫,記錄最早的事務(wù)日志記錄的日志序列號
- 通過之間閱讀磁盤,把全部的數(shù)據(jù)頁寫進備份介質(zhì)中
- 從捕捉到的序列號到日志末尾,寫全部的事務(wù)日志記錄
- 創(chuàng)建永久性的備份文件
sp_addumpdevice 'device_type',’logical_name‘,’physical_name‘
EXEC sp_addumpdevice 'disk', 'testfile', 'c:\temp\testfile.bak'
5. 創(chuàng)建臨時性備份文件
backup database master
to disk = 'c:\temp\masterBackup_1215.bak'
到了這里,關(guān)于SQl Server 2008 知識點概括【數(shù)據(jù)庫】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!