AUTO_INCREMENT的實現方式
相關變數
auto_increment_offset 起始位置
auto_increment_increment 自增值
# myisam
concurrent_insert
# innodb
innodb_autoinc_lock_mode=0,1,2 innodb引擎有效
sql_mode = NO_AUTO_VALUE_ON_ZERO,只有NULL才能生成自增值。 預設0或NULL代表生成自增值
mysqldump時會將0做新生成自增值處理
自增長插入分類
simple 未指定自增列的值,並且插入前已確定插入行數
bulk 未指定自增列的值,並且插入前未確定插入行數
mixed 插入內容一部分是自增長,一部分指定自增列的值
innodb
# 參考
# innodb儲存引擎第二版 6.3.4 自增長與鎖
# http://dev.mysql.com/doc/refman/5.5/en/innodb-auto-increment-handling.html
innodb_autoinc_lock_mode 各種值的處理方式,預設值為1
0: auto_inc locking,表的自增鎖定(5.1.22之前的實現方式),如果不回滾,則自增值是連續的
同一個表中只會有1個session持有,屬於表級鎖,但在insert sql執行完後立即釋放,並不是事務完成後才釋放
1: simple 使用互斥量(mutex)對記憶體計數器進行累加,如果表正在使用auto_inc locking方式,則需要等待釋放
bulk 使用auto_inc locking方式
mix 由於插入行數M是已知,直接申請M個自增值,則表的下一個自增值為當前值+M
效率高,造成自增值不連續
2: 所有型別的insert都採用互斥量(mutex)
插入效能高
對於併發bulk插入,產生自增值交錯現象。同一個sql語句插入的資料自增值不連續
基於statement的複製方式不安全
#
server啟動時對所有含自增列的表進行自增值初始化:
(SELECT MAX(ai_col) FROM t FOR UPDATE) +auto_increment_increment ,如果表是空的,透過auto_increment_offset初始化
myisam
# 理解較淺,若有錯誤,請指正
# 參考
# http://dev.mysql.com/doc/refman/5.5/en/concurrent-inserts.html
預設對insert進行排隊處理
concurrent_insert
目的:reduce contention between readers and writers for a given table
各種值的處理方式.預設為1
0 NEVER 禁止
1 AUTO 如果表中資料沒有hole(沒有進行delete操作),則允許併發插入
2 ALWAYS 無論是否有hole,都允許併發插入
auto_increment_offset 起始位置
auto_increment_increment 自增值
# myisam
concurrent_insert
# innodb
innodb_autoinc_lock_mode=0,1,2 innodb引擎有效
sql_mode = NO_AUTO_VALUE_ON_ZERO,只有NULL才能生成自增值。 預設0或NULL代表生成自增值
mysqldump時會將0做新生成自增值處理
自增長插入分類
simple 未指定自增列的值,並且插入前已確定插入行數
bulk 未指定自增列的值,並且插入前未確定插入行數
mixed 插入內容一部分是自增長,一部分指定自增列的值
innodb
# 參考
# innodb儲存引擎第二版 6.3.4 自增長與鎖
# http://dev.mysql.com/doc/refman/5.5/en/innodb-auto-increment-handling.html
innodb_autoinc_lock_mode 各種值的處理方式,預設值為1
0: auto_inc locking,表的自增鎖定(5.1.22之前的實現方式),如果不回滾,則自增值是連續的
同一個表中只會有1個session持有,屬於表級鎖,但在insert sql執行完後立即釋放,並不是事務完成後才釋放
1: simple 使用互斥量(mutex)對記憶體計數器進行累加,如果表正在使用auto_inc locking方式,則需要等待釋放
bulk 使用auto_inc locking方式
mix 由於插入行數M是已知,直接申請M個自增值,則表的下一個自增值為當前值+M
效率高,造成自增值不連續
2: 所有型別的insert都採用互斥量(mutex)
插入效能高
對於併發bulk插入,產生自增值交錯現象。同一個sql語句插入的資料自增值不連續
基於statement的複製方式不安全
#
server啟動時對所有含自增列的表進行自增值初始化:
(SELECT MAX(ai_col) FROM t FOR UPDATE) +auto_increment_increment ,如果表是空的,透過auto_increment_offset初始化
myisam
# 理解較淺,若有錯誤,請指正
# 參考
# http://dev.mysql.com/doc/refman/5.5/en/concurrent-inserts.html
預設對insert進行排隊處理
concurrent_insert
目的:reduce contention between readers and writers for a given table
各種值的處理方式.預設為1
0 NEVER 禁止
1 AUTO 如果表中資料沒有hole(沒有進行delete操作),則允許併發插入
2 ALWAYS 無論是否有hole,都允許併發插入
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1068726/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL的AUTO_INCREMENTMySqlREM
- 繼承的實現方式繼承
- 記住我的實現方式
- Flink的Task實現方式
- JavaScript實現繼承的方式JavaScript繼承
- weak 弱引用的實現方式
- MySQL分割槽的實現方式MySql
- 順序棧的實現方式
- MyBatis實現分頁的方式MyBatis
- Java中鎖的實現方式Java
- MySQL AUTO_INCREMENTMySqlREM
- Spring實現IOC容器的兩種實現方式Spring
- mysql的auto_increment詳解MySqlREM
- 實踐作業的一種實現方式
- 實現 JavaScript 沙箱的幾種方式JavaScript
- Java實現AOP的集中方式Java
- 三種Singleton的實現方式
- structs2的action實現方式Struct
- Elasticsearch 查詢in 和 not in 的實現方式Elasticsearch
- CSS居中的各種實現方式CSS
- React 中常見動畫的實現方式React動畫
- Websocketd:以Unix方式實現的WebsocketWeb
- 鏈式佇列的實現方式佇列
- 深入理解Vue的watch實現原理及其實現方式Vue
- 深入理解Vue的computed實現原理及其實現方式Vue
- InnoDB行鎖實現方式
- iOS熱更新實現方式iOS
- springAOP的三種實現方式Spring
- JS 繼承的 六 種實現方式JS繼承
- Java中實現執行緒的方式Java執行緒
- 分散式鎖的多種實現方式分散式
- js實現繼承的三種方式JS繼承
- 面試題 LazyMan 的Rxjs實現方式面試題JS
- Redis分散式鎖的正解實現方式Redis分散式
- KOA的簡易模板引擎實現方式
- 實現登入態的幾種方式
- 高內聚,低耦合的實現方式
- MHA高可用架構的實現方式架構