閱讀373 返回首頁    go 阿裏雲 go 技術社區[雲棲]


數據庫基礎

基本概念

數據庫:存放與管理數據的倉庫,是邏輯上相關的數據的集合。優點有:減少數據冗餘度、具有較高的獨立性、便於數據共享。

數據庫係統:由數據庫及其管理軟件組成的係統。

SQLStructured 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.丟失更新。多個事務同時更新同一行如事務AB同時修改小明的英語和語文成績。

2.髒讀。一個事物讀取了另一個事務尚未提交的更新。

3.不可重複讀。

4.幻象讀。

涉及多個數據庫的事務稱為分布式事務

 

鎖是一種機製,用來防止事務的並發問題。常見的有共享鎖、更新鎖、排它鎖等。

 

最後更新:2017-04-03 12:56:33

  上一篇:go 從CCObject看cocos2d-x的內存管理機製
  下一篇:go VMWare 網絡連接模式(bridged、NAT、host-only)詳解