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

信条模式在保存数据的同时发生了变化?

  •  0
  • Ropstah  · 技术社区  · 15 年前

    我们正在开发一个条令支持的网站,使用yaml定义我们的模式。我们的模式经常改变(包括FK关系),因此我们需要做很多:

        Doctrine::generateModelsFromYaml(APPPATH . 'models/yaml', APPPATH . 'models', array('generateTableClasses' => true));
        Doctrine::dropDatabases();
        Doctrine::createDatabases();
        Doctrine::createTablesFromModels();
    

    我们希望保留现有数据并将其存储回重新创建的数据库中。因此,在删除主数据库之前,我将数据复制到一个临时数据库中。

    如何将数据从“旧方案数据库副本”获取到“新方案数据库”? (新方案只包含新列,不删除任何列)

    注:

    这显然不起作用,因为列计数不匹配。

    SELECT * FROM copy.Table INTO newscheme.Table
    

    这显然是有效的,但是这对于每个表来说都要花费太多的时间:

    SELECT old.col, old.col2, old.col3,'somenewdefaultvalue' FROM copy.Table as old INTO newscheme.Table
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   DrColossos    15 年前

    你查过了吗 Migrations ?它们允许您以编程方式更改数据库模式。不会丢失数据(当然,除非删除列)

        2
  •  0
  •   Knut Haugen    15 年前

    如何编写一个脚本(例如使用条令类)来解析yaml模式文件(前一个版本和下一个版本)并生成要运行的SQL脚本?这将是一个一次性的工作,不需要那么多的工作。生成手动迁移脚本的好处在于,您可以轻松地将它们存储在版本控制系统中,并在以后重播版本步骤。如果这不是您所需要的,您只需收集代码中的更改,然后直接通过数据库驱动程序执行。

    当然,模式更改越花哨,维护就越困难,例如,列名更改、空到不空等等。

    推荐文章