Java如何生成序列號訂單號

今天給大家帶來也是比較實用的功能,用Java來生成序列號/訂單號,列舉幾個在我們生活中比較常見的案例:

訂單號

商品編號

交易單號

快遞單號

資料儲存

我是使用的

mysql

,下面就向大家分享一下是如何實現的~

理論知識

什麼是事務?

資料庫

事務

(簡稱:事務)是資料庫管理系統執行過程中的一個邏輯單位,由一個有限的資料庫操作序列構成。

髒讀、不可重複讀、幻讀

1、

髒讀

:A 事務對資料修改但還沒有提交到資料庫,這個時候 B 事務來訪問,那麼 B 事務對資料就不是最新的,這種現象被成為髒讀。

2、

不可重複讀

:A 事務多次讀取一個數據,這個時候在中途 B 事務修改了資料,導致 A 事務多次讀到的結果不一致。

3、

幻讀

:A 事務在前後兩次查詢同一個範圍的時候、後一次查詢看到了前一次查詢未看到的行,因為 B 事務在後一次查詢前新增加了一條資料。

mysql 的四種隔離級別

按照隔離的級別由低到高,

越高的隔離,效率越差

不可重複讀

,是 MySQL 的

預設隔離級別

Java如何生成序列號訂單號

1、

讀未提交

:允許別的事務,去讀取這個事務為提交之前的資料 缺點:可能會造成髒讀、幻讀、不可重複讀。

2、

不可重複讀

:併發條件下會出現問題,比如:A 使用者讀取資料, 隨後 B 使用者讀出該資料並修改, 此時 A 使用者再讀取資料時發現前後兩次的值不一致 缺點:可能會造成幻讀、不可重複讀。

3、

可重複讀

:當使用可重複讀隔離級別時,在事務執行期間會鎖定該事務以任何方式引用的所有行。缺點:幻讀

4、

序列化

:不會使用 mysql 的 mvcc 機制,在每一個 select 請求下獲得讀鎖,在每一個 update 操作下嘗試獲得寫鎖。缺點:效率最差

兩種悲觀鎖

共享鎖 (S 鎖)

: 如果事務 T 對資料 A 加上共享鎖後,則其他事務只能對 A 再加共享鎖,不能加排他鎖。獲准共享鎖的事務只能讀資料,不能修改資料。

排它鎖 (X 鎖)

:如果事務 T 對資料 A 加上排他鎖後,則其他事務不能再對 A 加任任何型別的封鎖。獲准排他鎖的事務既能讀資料,又能修改資料。

Java 程式碼實現