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,都允许并发插入




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26250550/viewspace-1068726/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26250550/viewspace-1068726/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值