【问题标题】:is it possible to mimic or ghost a table?是否可以模仿或幻化一张桌子?
【发布时间】:2015-05-19 13:58:24
【问题描述】:

所以情况是我有一些使用数据库表的代码,我想我可以用另一个表中的视图替换那个表。

我可能会重命名/删除现有表,然后以某种方式创建一个复制该表的视图,以便 php 代码认为它正在处理该表。

也许我应该做的是创建视图,然后简单地查找并替换代码中表名的所有实例?

模仿或幻化表格的最佳方法是什么?

【问题讨论】:

  • 删除表,创建与旧表同名的视图?唯一的问题是如果有任何东西想要插入视图。你将无法
  • @pala_ 在某些条件下他会。在我的回答中阅读更多相关信息。
  • @fancyPants 对我来说是新闻,但从排除列表来看,它几乎总是不可更新的,呵呵

标签: mysql


【解决方案1】:

重命名表格

 RENAME TABLE <table_name> TO <new_table_name>;

然后创建与原始 table_name 同名的视图。从表格中读取时,您的 PHP 代码将继续正常工作,无需多言。如果您的代码还必须更新、删除或插入该视图,则存在一定的限制。

视图中的行之间必须存在一对一的关系 以及基础表中的行。还有一些其他的 使视图不可更新的构造。更具体地说,一个视图 如果包含以下任何内容,则不可更新:

  • 聚合函数(SUM()、MIN()、MAX()、COUNT() 等)

  • 不同

  • 分组方式

  • 有

  • UNION 或 UNION ALL

  • 选择列表中的子查询

  • 某些联接(请参阅本节后面的其他联接讨论)

  • 对 FROM 子句中不可更新视图的引用

  • WHERE 子句中的子查询引用 FROM 子句中的表

  • 仅指文字值(在这种情况下,没有要更新的基础表)

  • ALGORITHM = TEMPTABLE(使用临时表总是使视图不可更新)

  • 对基表任意列的多次引用

在manual 中了解更多信息。

【讨论】:

    猜你喜欢
    • 2015-06-20
    • 2017-04-07
    • 2011-11-17
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 2014-01-24
    • 2011-09-25
    • 2012-05-23
    相关资源
    最近更新 更多