代码之家  ›  专栏  ›  技术社区  ›  BCS

我可以原子重命名/替换2个或更多的表和视图吗?

  •  1
  • BCS  · 技术社区  · 16 年前

    给定一个表x和一个视图y(其结构与x相同),是否有方法将x重命名为z,将y重命名为x,这样查询就永远看不到名为x的任何内容?重命名x并创建视图也是有效的。

    要点是,作为模式迁移计划的一部分,用新版本替换旧版本的视图替换旧表,这样两组客户机代码可以同时运行。

    mysql是我的选择,但是其他的信息也很有用。

    3 回复  |  直到 6 年前
        1
  •  5
  •   Dustin    16 年前

    这在postgres中是微不足道的,在mysql中是不可能的。

    mysql将模式修改从事务中免除。我有postgres的背景,所以这是一件显而易见的事情(开始一个事务,做一些事情,提交或回滚——postgres对什么是“做一些事情”并不挑剔)。

    如果你浏览MySQL的bug基础,你可以发现一些bug。

        2
  •  2
  •   davidism    16 年前

    mysql和oracle一样,认为大多数ddl语句(create table、alter table等)会导致“隐式提交”。不能使用事务模型保护其他连接看不到DDL更改。(我相信博士后在这方面是不寻常的)。

    您也许可以使用锁表来锁定表,但我怀疑只要重命名表,您就会丢失锁!锁数据库可能可以工作,但很可能要求所有其他客户端在授予您的锁请求之前完全断开连接。

    当然,这会导致其他客户机在您重命名表时阻塞,这可能是一个便宜的操作。

        3
  •  0
  •   DJo 1JD    6 年前

    其他答案是错误的。

    可以通过在ReNeNE语句中列出多个表来重新命名一组表。

    参见文档 here