mysql 訂單號主鍵 為什麼不用訂單號當做主鍵?

2021-10-18 21:05:51 字數 873 閱讀 1863

1.普通索引上儲存的值是主鍵的值,如果主鍵是乙個很長的字串並且建了很多普通索引,將造成普通索引占有很大的物理空間

2.自增id 在插入的時候可以保證相鄰的兩條記錄可能在同乙個資料塊,而訂單號的連續性在設計上可能沒有自增id好,導致連續插入可能在多個資料塊,增加了磁碟讀寫次數。

innodb儲存引擎邏輯儲存:

表空間 -> 段 -> 區 -> 頁 -> 行

表空間由各個段構成;

區是由連續的頁組成,每個區1mb;

乙個區由可以有多個頁,每頁預設16kb;

頁的組成部分:

2.資料頁頭( page header)固定 56 個位元組 包含slot數目,可重用空間起始位址,3.第乙個記錄位址,記錄數,最大事務id等

4.虛擬的最大最小記錄 (infimum + supremum record)

5.使用者記錄 (user records) 包含已經刪除的記錄以鍊錶的形式構成可重用空間

6.待分配空間 (free spaces) 未分配的空間

7.頁目錄 (page directory) slot 資訊,下面單獨介紹

8.檔案尾 (file trailer) 固定8個位元組,用來保證頁的完整性

innodb加鎖流程:

將掃瞄到的記錄都加鎖,範圍查詢會加間隙鎖,然後加鎖過程按照兩階段鎖2pl來實現:先加鎖,然後所有的鎖在事務提交的時候釋放

innodb 問爛了的 acid原則:

原子性:乙個事務內,要麼全成功要麼全失敗

一致性:保證磁碟和快取的資料一致

隔離性:預設可重複讀

永續性:事務提交後進行刷盤

mysql 建立自增長訂單號

因為最近做專案需要,需要使用到,自定義的不重複的自增長的訂單號,在網上找了資料然後又加入了自己的修改,做成的mysql生成訂單號的儲存過程。drop procedure pp create procedure proc get no tname varchar 50 cname varchar 50...

MySQL高並發生成唯一訂單號的方法實現

這篇博文發布後,有朋友問有沒有sql server版本的,現在有了 傳送門 在乙個erp進銷存系統或0a等其他系統中,如果多人同時進行生成訂單號的操作的話,容易出現多人獲得同乙個訂單號的情況,對公司業務造成不可挽回的損失 我們可以利用儲存過程和資料表搭配,建立一張表和建立儲存過程,儲存過程負責生成訂...

修改訂單號資料型別4 複製訂閱的主鍵限制 修改後

select db,sch,tbl,col,編寫刪除語句 use publisher db exec sp dropsubscription publication n publication article n article subscriber n all destination db n a...