zoukankan      html  css  js  c++  java
  • mysql创建table

    innodb 存储引擎,创建一个表

    本文分析创建一个段。待叙,主要说明是如何创建一文件,并在文件中分配一个索引。

    上面是创建一个表的调用图。创建文件和创建一个btr

    /**********************************************************************//**
    Allocates a new file segment inode.
    @return    segment inode, or NULL if not enough space */
    static
    fseg_inode_t*
    fsp_alloc_seg_inode(
    /*================*/
        fsp_header_t*    space_header,    /*!< in: space header */
        mtr_t*        mtr)        /*!< in/out: mini-transaction */
    {
        ulint        page_no;
        buf_block_t*    block;
        page_t*        page;
        fseg_inode_t*    inode;
        ibool        success;
        ulint        zip_size;
        ulint        n;
    
        ut_ad(page_offset(space_header) == FSP_HEADER_OFFSET);
    
        if (flst_get_len(space_header + FSP_SEG_INODES_FREE, mtr) == 0) {
            /* Allocate a new segment inode page */
    
            success = fsp_alloc_seg_inode_page(space_header, mtr);
    
            if (!success) {
    
                return(NULL);
            }
        }
    
        page_no = flst_get_first(space_header + FSP_SEG_INODES_FREE, mtr).page;
    
        zip_size = fsp_flags_get_zip_size(
            mach_read_from_4(FSP_SPACE_FLAGS + space_header));
        block = buf_page_get(page_get_space_id(page_align(space_header)),
                     zip_size, page_no, RW_X_LATCH, mtr);
        buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
    
        page = buf_block_get_frame(block);
    
        n = fsp_seg_inode_page_find_free(page, 0, zip_size, mtr);
    
        ut_a(n != ULINT_UNDEFINED);
    
        inode = fsp_seg_inode_page_get_nth_inode(page, n, zip_size, mtr);
    
        if (ULINT_UNDEFINED == fsp_seg_inode_page_find_free(page, n + 1,
                                    zip_size, mtr)) {
            /* There are no other unused headers left on the page: move it
            to another list */
    
            flst_remove(space_header + FSP_SEG_INODES_FREE,
                    page + FSEG_INODE_PAGE_NODE, mtr);
    
            flst_add_last(space_header + FSP_SEG_INODES_FULL,
                      page + FSEG_INODE_PAGE_NODE, mtr);
        }
    
        ut_ad(!mach_read_from_8(inode + FSEG_ID)
              || mach_read_from_4(inode + FSEG_MAGIC_N) == FSEG_MAGIC_N_VALUE);
        return(inode);
    }

     

  • 相关阅读:
    Idea中重建maven模块,dependencies引入为空的解决办法
    HTML <base> 标签 为页面上的所有链接规定默认地址或默认目标
    HTML 5 视频
    JavaScript 使用反斜杠对代码行进行折行
    HTML <b>、 <strong> 、<big>、<small>、<em>、<i>、<sub>和<sup> 标签
    JavaScript concat() 方法-连接两个或多个数组
    JavaScript Array(数组)对象
    JavaScript indexOf() 方法和 lastIndexOf() 方法
    JavaScript String(字符串)对象 实例
    JavaScript 对象
  • 原文地址:https://www.cnblogs.com/kisstherain/p/10258405.html
Copyright © 2011-2022 走看看