MySQL自增主鍵重複問題的可能

2021-09-25 06:53:45 字數 4122 閱讀 6799

mysql支援資料字段自增,可以用來作為資料表的主鍵字段。

看乙個資料表的建立例項:

drop

table

ifexists

`spgl_dfxmsplcxxb`

;create

table

`spgl_dfxmsplcxxb`

(`lsh`

int(11)

notnull

auto_increment

comment

'流水號'

,`dfsjzj`

varchar(50

)not

null

comment

'地方資料主鍵'

,`xzqhdm`

varchar(6

)not

null

comment

'行政區劃**'

,`splcbm`

varchar

(100

)not

null

comment

'審批流程編碼'

,`splcmc`

varchar

(200

)not

null

comment

'審批流程名稱'

,`splcbbh`

double(4

,1)not

null

comment

'審批流程版本號'

,`splcsxsj`

datetime

notnull

comment

'審批流程生效時間'

,`splclx`

int(11)

notnull

comment

'審批流程型別'

,`splcsm`

varchar

(2000

)default

null

comment

'splcsm'

,`fjmc`

varchar

(512

)not

null

comment

'附件名稱'

,`fjlx`

varchar(64

)not

null

comment

'附件型別'

,`fjid`

varchar

(100

)not

null

comment

'附件id'

,`sjyxbs`

int(11)

notnull

comment

'資料有效標識'

,`sjwxyy`

varchar

(200

)default

null

comment

'資料無效原因'

,`sjsczt`

int(11)

notnull

comment

'資料上傳狀態'

,`sbyy`

varchar

(1000

)default

null

comment

'失敗原因'

,primary

key(

`lsh`),

key`unique_main`

(`xzqhdm`

,`splcbm`

,`splcbbh`

)using

btree

)engine

=innodb

auto_increment=11

default

charset

=utf8mb4 comment

='表1:地方專案審批流程資訊表'

;

該錶將lsh欄位設定為自增主鍵,並預設auto_increment_increment=1、auto_increment_offset=1。

對該錶執行show create table spgl_dfxmsplcxxb可以得到如下資訊:

create

table

`spgl_dfxmsplcjdxxb`

(`lsh`

int(11)

notnull

auto_increment

comment

'流水號'

,`dfsjzj`

varchar(50

)not

null

comment

'地方資料主鍵'

,`xzqhdm`

varchar(6

)not

null

comment

'行政區劃**'

,`splcbm`

varchar

(100

)not

null

comment

'審批流程編碼'

,`splcbbh`

double(4

,1)not

null

comment

'審批流程版本號'

,`spjdbm`

varchar

(100

)default

null

comment

'審批階段編碼'

,`spjdmc`

varchar

(200

)not

null

comment

'審批階段名稱'

,`spjdxh`

int(11)

notnull

comment

'審批階段序號'

,`dybzspjdxh`

varchar

(200

)not

null

comment

'對應標準審批階段序號'

,`spjdsx`

int(11)

notnull

comment

'審批階段時限'

,`lcbsxlx`

int(11)

notnull

comment

'里程碑事項型別'

,`sjyxbs`

int(11)

notnull

comment

'資料有效標識'

,`sjwxyy`

varchar

(200

)default

null

comment

'資料無效原因'

,`sjsczt`

int(11)

notnull

comment

'資料上傳狀態'

,`sbyy`

varchar

(1000

)default

null

comment

'失敗原因'

,primary

key(

`lsh`),

key`unique_main`

(`xzqhdm`

,`splcbm`

,`splcbbh`

,`spjdxh`

)using

btree

)engine

=innodb

default

charset

=utf8mb4 comment

='表2:地方專案審批流程階段資訊表'

對於表的記錄間互相拷貝問題很容易造成自增字段的重複。

例如在我經歷的一次專案:本地資料庫和前置資料庫進行資料同步時,本地庫向前置庫上傳資料,前置庫插入傳來的資料並返回自增字段流水號更本地庫。同步每3分種依據標誌位檢查執行一次。這樣,如果對本地庫資料進行多次修改,那麼就需要向前置庫多次上傳該條記錄(或該條記錄的拷貝記錄)。如果沒有在上傳前手動將前置庫返回的流水號置為空,那麼前置庫將會用這個已有的流水號作為主鍵插入新資料(而不是重新生成新的流水號),從而導致主鍵重複的錯誤。

所以,在處理含有自增字段的**時,如果自增字段和其他**有資料上的關聯,應當注意這種操作會不會導致自增字段的衝突。

MySQL自增主鍵刪除後重複問題

這是我同事的乙個朋友遇到的問題,標題可能有些拗口,我重現下場景 設定一張mysql表,表裡有乙個自增主鍵id,往表裡插入資料,假如插入資料之後表最後一行的id是100,我先刪除這條id為100的記錄,然後重新啟動伺服器,按理說如果再往這個表裡插入新的記錄,新紀錄的id將為101,對吧?估計大家都是這...

MySQL自增主鍵刪除後重複問題

mysql自增主鍵刪除後重複問題 這是我同事的乙個朋友遇到的問題,標題可能有些拗口,我重現下場景 設定一張mysql表,表裡有乙個自增主鍵id,往表裡插入資料,假如插入資料之後表最後一行的id是100,我先刪除這條id為100的記錄,然後重新啟動伺服器,按理說如果再往這個表裡插入新的記錄,新紀錄的i...

mysql 主鍵自增語句 MySQL 自增主鍵

以下僅考慮 innodb 儲存引擎。自增主鍵有兩個性質需要考慮 單調性每次插入一條資料,其 id 都是比上一條插入的資料的 id 大,就算上一條資料被刪除。連續性插入成功時,其資料的 id 和前一次插入成功時資料的 id 相鄰。自增主鍵的單調性 為何會有單調性的問題?這主要跟自增主鍵最大值的獲取方式...