資料庫基礎

2021-05-03 21:13:38 字數 1744 閱讀 3800

一.資料庫事物特徵

1.atomic(原子性)

不可分割

2.consistency(一致性)

參照完整

3.isolation(隔離性)

防止併發

4.durability(永續性)

永久儲存資料

二.事物和併發

1.併發問題:第一類丟失,髒讀,虛讀,不可重複讀,第二類丟失更新(不可重複讀的特例)

2.鎖的型別(資料庫系統中的):共享鎖(select 是使用),獨佔鎖(insert update delete等),更新鎖(為解決死鎖)

3.事物隔離級別:

序列化(serializable):**:8

可重複讀(repeatable read):**:4

讀已提交的資料(read commited):**:2 //會產生第二類資料丟失 和 不可重複讀

讀為提交的資料(read uncommited):**:1

4.設定隔離級別

mysql:

mysql->set transaction isolation level read commited

eg:hibernate.connection.isolation=2

三.悲觀鎖 和 樂觀鎖 (針對read commited)

1.悲觀鎖:運算元據,假定有其他事物來競爭

sql:

select * from user where id=1 for update

hibernate中使用:

get()/load() 使用

user user = (user)session.get(user.class,1,lockmode.upgrde);

query 使用

query.setlockmode("",lockmode.update);         

鎖定模式:

lockmode.none              //有快取用快取,沒有從資料庫

lockmode.read              //直接從資料庫,不使用快取

lockmode.upgrade           //相當於sql:select form update ->獨佔鎖

lockmode.upgrade_nowait    //是oracle資料庫特有的 select for update nowait

lockmode.waite             //insert update 資料時候,hibernate 內部使用的

lockmode.force             //在資料庫中強制增加物件的版本,本來表明它已經被當前事物修改

備註:如果資料庫不支援select ...for update  ->實現:在表中設定一列標誌位,表示此表是鎖定的還是空閒的,如:此標誌位true是我等            待,false時我可以操作.每個操作前都鎖定(設標誌為true) 操作後解鎖(設定標誌位false);

2.樂觀鎖:運算元據,假定沒有其他競爭

實現:版本控制version(推薦使用此方式) 

時間戳timestamp(不推薦)

其他實現方式:class 元素 optimistic-lock="all/dirty" dynamic-update="true"

使用optimistic-lock時,dynamic-update必須設定為true

all : update where 字句中包含所有屬性

dirty:update where 字句中包含改變過的屬性

資料庫 資料庫基礎

什麼是sql 結構化查詢語言 structtured query language sql的作用 啟動mysql.exe,連線伺服器後,就可以使用sql來操作伺服器了。類似php中操作mysql的語句就是sql語句 sql標準 由國際標準化組織 iso 制定的,對dbms 資料庫管理系統 的統一操作...

資料庫基礎 資料庫設計

一 資料庫生命週期 1.週期 需求分析,概念結構設計,邏輯設計,物理設計,系統實施,系統執行和維護。2.響應的文件 二 正規化 一般資料庫要求規範化到第三正規化,視具體需求重新調整。第一正規化 1nf 強調列的原子性,即列不能分為多列。第二正規化 2nf 關係屬於第一正規化,且每乙個非主屬性完全函式...

資料庫基礎

資料庫無外乎是增 刪 改 查四項,我們一般建立乙個資料庫,可以運用視覺化建立,也可以運用命令語句建立。命令語句是 create database 資料庫名。然後在後面標註好尺寸 size 和最大尺寸 maxsize,來儲存內容。建立 是也可以用視覺化,用命令語句是這樣的。舉個例子,建立乙個名字為st...