eosio的multi_index

本文详细介绍了EOSIO智能合约中的multi_index接口,它类似传统数据库的表,支持主键和多索引排序。通过实例化、emplace、erase、modify和find等操作,可以实现数据的增删改查。此外,还讨论了multi_index不支持的C++特性、迭代器使用以及二级索引的创建和访问。
摘要由CSDN通过智能技术生成

概述

  1. multi_index是eosio上的数据库管理接口,通过eosio::multi_index智能合约能够写入、读取和修改eosio数据库的数据
  2. multi_index在eosio中的位置:eos/contracts/eosiolib/multi_index.hpp
  3. eosio::multi_index来源于boost库的boost::multi_index
  4. eosio::multi_index在概念上和传统数据库的“表(table)”类似,数据“行(rows)”是独立的对象(通常是class对象或struct对象),数据“列(columns)”是对象的成员属性(class或struct的成员属性)
  5. eosio::multi_index提供和传统数据库的“键(key)”类似的成员属性,用于快速查找对象
  6. eosio::multi_index支持主键(primary key),但必须是唯一的无符号64位整型(uint64_t)
  7. eosio::multi_index按主键排序时,使用升序
  8. eosio::multi_index允许使用自定义函数作为索引,但它的返回值是受限制的,只能是支持的键类型
  9. multi_index表允许多索引排序,最多可以使用16个二级索引
  10. 二级索引作为multi_index表构造函数的一部分创建,不支持直接构建
  11. multi_index迭代器可以双向迭代,即const_iterator或const_reverse_iterator

创建multi_index表

  1. 使用C++类(class)或结构体(struct)定义对象
  2. 在class或struct中,定义一个const成员函数:primary_key(),返回uint64_t类型的主键值
  3. 确定二级索引(最多支持16个),二级索引不局限于uint64_t,它支持更多类型
二级索引支持的键类型:
    idx64:64位无符号整型键
    idx128:128位无符号整型键
    idx256:256位固定大小字典键
    idx_double:双精度浮点键
    idx_long_double:四倍精度浮点键
  1. 为每个二级索引定义extractor,即一个函数,用于从Multi-Index表的函数中获取键,这个函数会被indexed_by(后面会讲)用到
  2. 一个完整的multi_index表定义如下:
//定义address表,i64表示索引使用默认的uint64_t类型

//@abi table address i64
struct address {
    uint64_t account;
    string name;
    uint64_t phone;
    uint64_t liked;

    //定义address表的主键
    uint64_t primary_key() const { return account; }
    //定义extractor,二级索引是phone
    uint64_t get_phone() const
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值