h2database源码解析-如何插入一条行记录

本文详细介绍了H2Database在插入行记录时的步骤,包括加表锁、搜索插入位置、构建undolog、插入B树和提交事务。在插入过程中,H2使用B+树结构,通过二分查找确定插入位置,并在内存中构建undolog以支持事务回滚。事务提交时,会检查是否更改过数据,并更新表和索引中的记录状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文接下来介绍h2database如何插入一条行记录。
下文h2database简称为h2。
h2使用页存储数据,默认每页大小为4k,数据结构为B

1、加表锁

当向表里面插入一条数据时,首先查到该表对应的root页,如果该表之前打开过,那么root页便存在内存中,如果没有打开过,需要首先打开该表,将root页加载到内存中。在插入数据前,h2还会对表进行加共享锁,以防止在操作数据期间,有其他事务更新表结构。
加锁的代码如下:

table.lock(session, Table.WRITE_LOCK);//增加共享锁
try {
   
	table.addRow(session, newRow);//向表中增加一条记录
} 

2、搜索插入位置

接下来根据要插入的数据,搜索B+树,代码如下:

	//第一次调用时,page就是root页,key可以认为是要插入记录行的主键
    static <K,V> CursorPos<K,V> traverseDown(Page<K,V> page, K key) {
   
        CursorPos<K,V> cursorPos = null;
        while (!page
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值