数据库的事务,隔离级别和3大范式
*數據庫事務的想關操作
1.事務開始:開始是一個事物,作為回滾的標記
2,回滾 rollback :回滾到上一個事務開始的地方,
或者回滾到某個存檔點,期間沒被 commit ; 操作都會被撤回
3.提交commit ;將事務中所有操作提交到數據庫中 4.存檔點:設置存檔點方便回滾
*開始事務
........確認一個起點
begin 或 start transaction ;#兩種都可以
回滾:在未提交到數據庫時,可回滾到上次提交數據后
begin ; update account set money=money-1000 where id=2; update account set money=money+1000 where id=1; select *from account; #回滾 rollback ;#后悔多條數據
begin ; insert into account(name, money) values ('zhaoliu',2000);#存檔 savepoint suibian;update account set money=money-1000 where id=2; update account set money=money+1000 where id=1;select *from account;rollback to suibian;commit ;*數據庫事務的4個特性(ACID)
1.原子性( atomicity )
事務包含的所有操作,要么全部成功,要么全部失敗
2,一致性( Consistency )(快照讀)
事務必須使數據庫從一個一致性狀態到另一個一致性狀態
3.隔離性( isolation )
如果有多個用戶并發訪問數據庫,數據庫的每個用戶開始事務
不能被其他事物的操作干擾,多個并發事務之間應當保持相互隔離
4.持久性( Durability
事務的操作,一旦被提交,對于數據庫的改變是永久的
即使數據庫發生故障,也不能丟失已提交的數據/完成的改變
*三個隔離性問題
1.臟讀
一個事務讀取了未提交事務執行過程中的數據
2.不可重復讀
對于數據庫中的莫個數據,一個事務執行過程中多次查詢返回不同結果,
3,幻讀(虛讀
對于一個事務,批量修改數據的時候,另一個事物插入一條新數據
在第一個事務中,執行了操作卻沒有將所有情況數據進行修改
*4個隔離級別
1 RU (Read Uncommitted
讀取未提交內容,所有的事務都可以看到其他事務未提交內容
2,RC (Read Committed
讀取提交內容,可以避免臟讀,但是無法避免不可重復讀和幻讀
3 RR (Repeatable Read
可重復復讀,MYSQL默認的隔離級別,可以避免臟讀和不可重復讀
但不能避免幻讀,通過Innodb引擎版本并發控制來避免幻讀
4 ,Serializable 串行化
最高隔離級別,強制所有事務排序執行,
性能會出現問題,會出現大量的超時和鎖競爭現象
*隔離級別的實現
1,讀鎖和寫鎖
共享鎖:數據庫的讀鎖,一旦加上該鎖,其他用戶只能讀不能寫
排它鎖 : 寫鎖, 一旦給表或行加上寫鎖,其他用戶既不能讀也不能寫
2,行鎖和表鎖
*數據庫設計3大范式
范式順序
1 2 3 bc 4 //范式都是依賴關系
第一范式
數據庫表的每一列都是不能繼續拆分的最小單元
第二范式
滿足INF,表中的每一列都必須依賴主鍵
一個表只描述一個事
第三范式
滿足2NF,表中所有的列至于主鍵直接相關,而不是間接相關
第一范式:列不能拆分
第二范式:每個表只能描述一個事
第三范式:使用外鍵做表之間的關聯
轉載于:https://www.cnblogs.com/lxx-1843693653/p/10938564.html
總結
以上是生活随笔為你收集整理的数据库的事务,隔离级别和3大范式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5属性详解,HTML5中的dow
- 下一篇: 数据库课程设计