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 相鄰。自增主鍵的單調性 為何會有單調性的問題?這主要跟自增主鍵最大值的獲取方式...