只读的表

简介: 只读的表

使用代理的概念可以很容易地实现只读的表,需要做的只是跟踪对表的更新操作并抛出异常即可。对于元方法 __index ,由于我们不需要跟踪查询,所以可以直接使用原来的表来代替函数。这样做比把所有的查询重定向到原来的表上更简单也更有效率。不过,这种做法要求为每个只读代理创建一个新的元表,其中 __index 元方法指向原来的表:

function readonly (t)
  local proxy = {}
  local mt = {
    __index = t,
    __newindex = function (t, k, v)
      error("attempt to update a read-only table", 2)
    end
  }
  setmetatable(proxy, mt)
  return proxy
end


作为示例,我们可以创建一个表示星期的只读表:

days = readOnly{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
print(days[1])        --> Sunday
days[2] = "Monday"    --> stdin:1: attempt to update a read-only table
目录
相关文章
|
6月前
|
存储 运维 关系型数据库
PolarDB产品使用问题之在删除主节点上的表后尝试查询归档表遇到问题,该如何解决
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
7月前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用合集之只读结点 0(最低) - 7(最高),只读结点个数不包括已有的一主一只读吗
PolarDB是阿里云推出的一种云原生数据库服务,专为云设计,提供兼容MySQL、PostgreSQL的高性能、低成本、弹性可扩展的数据库解决方案,可以有效地管理和优化PolarDB实例,确保数据库服务的稳定、高效运行。以下是使用PolarDB产品的一些建议和最佳实践合集。
|
Oracle 关系型数据库 数据库
OGG重新同步表
OGG在线重新同步表的步骤
269 0
|
存储 SQL 关系型数据库
MySQL使用存储过程为数据库中全部的表增加备用字段
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/84879858 ...
1775 0
|
安全 数据安全/隐私保护