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);
    }

     

  • 相关阅读:
    [LeetCode每日1题][简单] 169. 多数元素
    [LeetCode每日1题][简单] 1013. 将数组分成和相等的三个部分
    [LeetCode每日1题][中等] 322. 零钱兑换
    [LeetCode每日1题][中等] 面试题59
    软工实践个人总结
    2019 SDN大作业
    2019 SDN上机第7次作业
    第01组 Beta版本演示
    如果有一天我变得很有钱组——alpha冲刺day7
    如果有一天我变得很有钱组——alpha冲刺day6
  • 原文地址:https://www.cnblogs.com/kisstherain/p/10258405.html
Copyright © 2011-2022 走看看