mysql 原子自增_mysql自增锁_33

本文探讨了MySQL中自增锁可能导致的死锁情况。介绍了自增锁的工作原理,包括不同事务如何获取和释放锁。提到了在特定场景下,如`insert select`操作,以及`innodb_autoinc_lock_mode`的三种模式。还讨论了在并发插入时的自增值连续性问题,以及与binlog格式、MyISAM和InnoDB引擎的关系。最后,简要概述了事务的ACID属性和事务类型。
摘要由CSDN通过智能技术生成

自增锁也会导致死锁

自增锁

一个表一个自增列

auto_increment pk

select max(auto_inc_col)from t for update

在事务提交前释放

其他所在事务提交时才释放

think about

insert select

create table z(a int auto_increment,b int,primary key(a))

begin;

insert into z values(null,1)         begin

insert into z values(null,2) 可以插入

如果之前插入的记录被回滚掉 自增值不会回滚

8d0100071ee80afb7620af7d7c0c8786.png

insert 。。。on duplicate key update遇到重复值会自动更新

innodb_autoinc_lock_mode= 0 1 2

0:传统模式 在sql语句执行完之后自增锁才释放

1 默认参数

simple inserts 并发:在sql语句没执行完之前就可以释放

bulk insert 传统方式

2

所有自增都以并发方式

同一sql语句自增可能不连续

row-based binlog

如果把值设置为2,需要设置为row-based binlog

27c18c8c2315da3a2e8b564a467be0d7.png

myisadm与innodb的自增

innodb的自增列必须被定义为一个key

create table t(a int auto_increment,b int,key(b,a))engine=innodb; 必须被定义为key的第一个列(为什么) select max(auto_inc_col)from t for update

自增不会持久化

auto_increment_increment

auto_increment_offset

二阶段锁

读加锁 写加锁 serilizeable

非锁定的一致性读

041608ed1081ed71893190a1b42fa2b7.png

如果是sr  右边不能执行

事务:

a:原子性 redo

c:一致性 undo

i:隔离性 lock

d:持久性 redo&undo

flat transaction:begin commit

flat gransaction with savepoints:

chained transaction:

0459312728430d00332a66fc28a004f7.png

7850ad21a162cb3ea747fec0ccf7f6bb.png

4247e6f6055a5dad774e48b6acf21f10.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值