數據庫基礎
基本概念
數據庫:存放與管理數據的倉庫,是邏輯上相關的數據的集合。優點有:減少數據冗餘度、具有較高的獨立性、便於數據共享。
數據庫係統:由數據庫及其管理軟件組成的係統。
SQL:Structured Query Language,結構化查詢語言,用來訪問關係型數據庫。
表:等同於二維數組,每一列是數據屬性,每一行是數據內容。
字段:表中的列也叫字段。字段有自己的名字與屬性。
索引:是單獨的數據庫結構,用來加速數據檢索。
視圖:將查詢的結果以虛擬表的形式存儲,用於保護數據安全性。
存儲過程:能夠完成特定功能的SQL語句的集合,類似於高級語言中的函數。
屬性
規範化
範式:Normal Form。
1NF:表的每一字段都是不可分割的基本數據項。
2NF:首先要滿足1NF,然後要求數據庫表中的每個非主關鍵字段都完全依賴於主關鍵字段。
3NF:首先要滿足2NF,然後要求不存在非關鍵字段對任一候選關鍵字段的傳遞函數依賴。
一般說來,數據庫隻需滿足第三範式(3NF)就行了。
索引
是單獨的數據庫結構,用來加速數據檢索。
缺點:1.占用額外存儲空間;2.對表中數據修改時,索引也要動態維護,效率降低。
聚集索引:根據數據行的鍵值排序和存儲。
非聚集索引:不修改原表中數據項的位置。
存儲過程與觸發器
數據庫中的存儲過程類似於高級語言中的函數,是能夠完成特定功能的語句的集合。優點:代碼重用、可傳參數。
create procedure fun1 //根據學生編號查詢學生信息
@x int
as
select * from Student where stu_id=@x
調用方法為: execute fun1
觸發器是一種特殊類型的存儲過程,當指定表中的數據發生變化時觸發器自動生效,通常被用來約束數據完整性。
觸發器不能設置參數、不能通過名稱調用。觸發器被作為事務來處理。
Create trigger t_student //對表Student添加數據時,都會有提示信息-‘準備插入數據’
on Student
after insert
as
print ‘準備插入數據’
遊標
遊標是取用一組數據並能夠一次與一個單獨的數據進行交互的方法。
通常select語句對整行產生作用,遊標可以對某行的某列起作用。
//聲明遊標
declare my_cursor cursor for
select * from Student
where id=’1’
//打開遊標
open my_cursor
go
事務、鎖及其並發問題
事務是邏輯上相關的一些語句的集合。為了保障數據的一致性,這些語句要麼全成功執行,要麼執行失敗進行回滾。
特性:原子性、一致性、隔離性、持久性。
begin transaction my_t //聲明事務開始
update Student set name =’小明’
where id=1
commit transaction my_t ////提交事務
事務的並發問題有4種:
1.丟失更新。多個事務同時更新同一行如事務A、B同時修改小明的英語和語文成績。
2.髒讀。一個事物讀取了另一個事務尚未提交的更新。
3.不可重複讀。
4.幻象讀。
涉及多個數據庫的事務稱為分布式事務
鎖是一種機製,用來防止事務的並發問題。常見的有共享鎖、更新鎖、排它鎖等。
最後更新:2017-04-03 12:56:33