9 MYSQL 自增值的上限
MySQL 里面的几种自增 id,它们的值达到上限以后,会出现什么情况。
1. 表定义自增值 id
表定义的自增值达到上限后的逻辑是:再申请下一个 id 时,得到的值保持不变。因此就会出现主键冲突错误。
MySQL 里面的几种自增 id,它们的值达到上限以后,会出现什么情况。
表定义的自增值达到上限后的逻辑是:再申请下一个 id 时,得到的值保持不变。因此就会出现主键冲突错误。
insert select 为什么有这么多锁?
本节我们会介绍一些特殊的 insert 语句产生的锁:
|
|
在可重复读隔离级别下,binlog_format=statement 时, insert into t2(c,d) select c,d from t; 需要对表 t 的所有行和间隙加锁。原因还是日志和数据的一致性。
B+树索引

实现索引的方式有很多方式,N 叉树由于在读写上的性能优点,以及适配磁盘的访问模式,已经被广泛应用在数据库引擎中了。在 InnoDB 中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表。InnoDB 使用了 B+ 树索引模型,所以数据都是存储在 B+ 树中的。每一个索引在 InnoDB 里面对应一棵 B+ 树。
幻读
幻读指的是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行。对于幻读需要在注意:
没有行锁到底会导致什么问题,我们来看下面这个示例:
事务的隔离性和回滚日志
事务的隔离级别包括:
在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。
全局锁 - 表锁 - 行锁
全局锁:
Flush tables with read lockunlock tables,客户端断开时会自动释放锁做全库备份时,对于 Innodb,通过可重复度隔离级别我们就可以获取数据库的一致视图,但是对 于MyISAM 这些不支持事务的存储引擎,只能使用 Flush tables with read lock 让整个库处于只读状态。