mysql自增锁_33

自增锁也会导致死锁

自增锁

一个表一个自增列

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) 可以插入

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

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

innodb_autoinc_lock_mode= 0 1 2

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

1 默认参数

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

bulk insert 传统方式

所有自增都以并发方式

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

row-based binlog

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

 

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

非锁定的一致性读

如果是sr  右边不能执行

 事务:

a:原子性 redo

c:一致性 undo 

i:隔离性 lock 

d:持久性 redo&undo

flat transaction:begin commit

flat gransaction with savepoints:

chained transaction:

 

原文地址:https://www.cnblogs.com/lvjinping/p/9622615.html