一.資料庫事物特徵
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...