mysql

mysql之自增id

自增id值的存储方式 innodb在5.8版本前是不对该值进行存储的,只是放在内存中,如果实例重启,则查询表的最大值+1,重新放在内存中。 在5.8以后会将自增值的变更记录在redo log中,重启后依靠redolog恢复重启前值。 自增id修改时机 当执行insert操作时,如果未指定id,或id为0,则会取自增id并将自增值+1;如果指定了id,则会计算指定的id与自增值的大小,如果小的话不会对自增值进行操作,如果大于自增值,则会将自增值修改为该id+1 严格来说并非+1,而是+auto_increment_increment的值 自增锁的范围 在5.1.

  • 凯文
3 min read
mysql

mysql Communications link failure

原因 mysql连接错误 复现 启动服务 请求接口,调用mysql获取数据 stop mysql 请求接口报错 启动mysql 请求接口,未自动恢复,仍报错Communications link failure 解决方案 使用DruidDataSource使用com.mysql.jdbc.Driver 当创建失败时,会通过com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread循环创建连接,间隔时间为timeBetweenConnectErrorMillis直到获取到正常的连接 使用DruidDataSource使用com.p6spy.engine.spy.P6SpyDriver

  • 凯文
1 min read
mysql

mysql数据结构之b+树

b树 b树(balance tree)和b+树应用在数据库索引,可以认为是m叉的多路平衡查找树,但是从理论上讲,二叉树查找速度和比较次数都是最小的,为什么不用二叉树呢? 因为我们要考虑磁盘IO的影响,它相对于内存来说是很慢的。数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)。 所以我们要减少IO次数,对于树来说,IO次数就是树的高度,而“矮胖”就是b树的特征之一,它的每个节点最多包含m个孩子,m称为b树的阶,m的大小取决于磁盘页的大小。 b树特征 一个M阶的b树具有如下几个特征: 定义任意非叶子结点最多只有M个儿子,且M>2; 根结点的儿子数为[

  • 凯文
6 min read
mysql

mysql通过MapperScan实现多数据源

MapperScan org.mybatis.spring.annotation.MapperScan 在SpringBoot中集成MyBatis,可以在mapper接口上添加@Mapper注解,将mapper注入到Spring,但是如果每一给mapper都添加@mapper注解会很麻烦,这时可以使用@MapperScan注解来扫描包。 @MapperScan注解只会扫描包中的接口,不会扫描类,所以可以在包中写Provider类。 属性 basePackages @MapperScan("com.demo.mapper"):扫描指定包中的接口 @MapperScan("com.demo..mapper"):一个代表任意字符串,

  • 凯文
2 min read
mysql

mysql行锁分析一

mysql锁的原则 原则 1:加锁的基本单位是 next-key lock。next-key lock 是前开后闭区间。 原则 2:查找过程中访问到的对象才会加锁。 2.1: 若字段上无索引,因要根据id查询所有的数据,所以所有数据均会加上next-key lock 2.2: 若字段上有普通索引,则只有访问到的数据添加next-key lock,但是最后一条由于不满足,所以根据优化2,退化为间隙锁 优化 1:索引上的等值查询,给唯一索引加锁的时候,next-key lock 退化为行锁。

  • 凯文
10 min read
mysql

数据库事务的四大特性

四大特性 原子性(Atomicity):原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚 一致性(Consistency):一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。 拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 隔离性(Isolation):隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。 持久性(Durability):持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

  • mysql
1 min read