Java如何生成序列號訂單號
今天給大家帶來也是比較實用的功能,用Java來生成序列號/訂單號,列舉幾個在我們生活中比較常見的案例:
訂單號
商品編號
交易單號
快遞單號
資料儲存
我是使用的
mysql
,下面就向大家分享一下是如何實現的~
理論知識
什麼是事務?
資料庫
事務
(簡稱:事務)是資料庫管理系統執行過程中的一個邏輯單位,由一個有限的資料庫操作序列構成。
髒讀、不可重複讀、幻讀
1、
髒讀
:A 事務對資料修改但還沒有提交到資料庫,這個時候 B 事務來訪問,那麼 B 事務對資料就不是最新的,這種現象被成為髒讀。
2、
不可重複讀
:A 事務多次讀取一個數據,這個時候在中途 B 事務修改了資料,導致 A 事務多次讀到的結果不一致。
3、
幻讀
:A 事務在前後兩次查詢同一個範圍的時候、後一次查詢看到了前一次查詢未看到的行,因為 B 事務在後一次查詢前新增加了一條資料。
mysql 的四種隔離級別
按照隔離的級別由低到高,
越高的隔離,效率越差
,
不可重複讀
,是 MySQL 的
預設隔離級別
。
1、
讀未提交
:允許別的事務,去讀取這個事務為提交之前的資料 缺點:可能會造成髒讀、幻讀、不可重複讀。
2、
不可重複讀
:併發條件下會出現問題,比如:A 使用者讀取資料, 隨後 B 使用者讀出該資料並修改, 此時 A 使用者再讀取資料時發現前後兩次的值不一致 缺點:可能會造成幻讀、不可重複讀。
3、
可重複讀
:當使用可重複讀隔離級別時,在事務執行期間會鎖定該事務以任何方式引用的所有行。缺點:幻讀
4、
序列化
:不會使用 mysql 的 mvcc 機制,在每一個 select 請求下獲得讀鎖,在每一個 update 操作下嘗試獲得寫鎖。缺點:效率最差
兩種悲觀鎖
共享鎖 (S 鎖)
: 如果事務 T 對資料 A 加上共享鎖後,則其他事務只能對 A 再加共享鎖,不能加排他鎖。獲准共享鎖的事務只能讀資料,不能修改資料。
排它鎖 (X 鎖)
:如果事務 T 對資料 A 加上排他鎖後,則其他事務不能再對 A 加任任何型別的封鎖。獲准排他鎖的事務既能讀資料,又能修改資料。
Java 程式碼實現