本文接下来介绍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