EOS系列十四:EOS智能合约中多索引表的高级用法

一、简介

多索引表使用的高级功能主要有:

1、可以建立多级索引,由不同字段组成的多级索引,方便根据不同字段进行快速操作。

2、可以建立只有一行数据的多索引表。

3、可以建立体现一对多关系的多索引表,即一个关键字存在多条记录与其对应。如学生表中很多个学生都是同一个班主任,这样根据班主任名字这个关键字可以找到很多条学生记录。

二、详解

1、建立多级索引的使用方法:(详见https://eosio.github.io/eosio.cdt/1.6.0/group__multiindex.html

合约代码(要点见注释):

#include <eosiolib/eosio.hpp>
using namespace eosio;
class mycontract: contract {
  struct record {//定义多索引表结构类型
    uint64_t    primary;
    uint64_t    secondary_1;
    uint128_t   secondary_2;
    checksum256 secondary_3;
    double      secondary_4;
    long double secondary_5;
    uint64_t primary_key() const { return primary; }//主索引
    uint64_t get_secondary_1() const { return secondary_1; }//从索引
    uint128_t get_secondary_2() const { return secondary_2; }//从索引
    checksum256 get_secondary_3() const { return secondary_3; }//从索引
    double get_secondary_4() const { return secondary_4; }//从索引
    long double get_secondary_5() const { return secondary_5; }//从索引
  };
  public:
    mycontract(name receiver, name code, datastream<const char*> ds):contract(receiver, code, ds){}
    void myaction() {
      auto code = _self;
      auto scope = _self;
      multi_index<"mytable"_n, record,
        indexed_by< "bysecondary1"_n, const_mem_fun<record, uint64_t, &record::get_secondary_1> >,//从索引
        indexed_by< "bysecondary2"_n, const_mem_fun<record, uint128_t, &record::get_secondary_2> >,//从索引
        indexed_by< "bysecondary3"_n, const_mem_fun<record, checksum256, &record::get_secondary_3> >,//从索引
        indexed_by< "bysecondary4"_n, const_mem_fun<record, double, &record::get_secondary_4> >,//从索引
        indexed_by< "bysecondary5"_n, const_mem_fun<record, long double, &record::get_secondary_5> >//从索引
      > table( code, scope);//定义多索引表的变量
    }
}
EOSIO_DISPATCH( mycontract, (myaction) )

2、只有一行数据的多索引表,数据结构定义还是多索引表的定义,主要特点体现在增、删、改、查的控制函数上,由函数来保证只有一条记录。

例子略。

3、体现一对多关系的多索引表,数据结构定义还是多索引表的定义,主要特点体现在(1)表定义时建立一对多的这个关键字的从索引.(2)表操作时根据这个关键字的查询操作,对应的则是多条记录。

例子略。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值