【问题标题】:add new fields to existing table向现有表添加新字段
【发布时间】:2012-05-31 22:32:28
【问题描述】:

我确定在 stackoverflow 上有这样的问题,但我只是找不到它:(

我有 2 个具有相同数据的数据库(“开发人员”数据库和“生产”数据库)。 “生产”数据库是“实时”数据库 - 现场访问者看到此数据 “开发者”数据库是我在本地服务器上创建新功能的数据库。

当我向“开发人员”数据库添加一些新表和旧表中的一些新字段时,我遇到了这种情况。

现在我必须将这个新创建的字段和表复制到“生产”数据库(但只有结构,不应复制数据,并且不得更改“生产”数据库中的数据)。

UPD:也许有解决方案,我可以从开发数据库中转储数据库结构,当我将其导入生产数据库时,它会自动从所有表中添加所有新字段

我应该使用什么功能?

谢谢。

【问题讨论】:

  • 看不到问题。保存用于更新开发人员数据库的 DDL 脚本并在生产数据库上使用它们。也就是说,如果您确实使用了 DDL 命令(而不是交互地进行更改,使用一些具有漂亮 UI 的工具)。如果你不这样做,那么,也许是时候这样做了。 :)

标签: mysql sql


【解决方案1】:

【讨论】:

  • 看来他也想建表
  • 但使用此功能我必须自己指定所有字段。也许有解决方案可以让我进行数据库结构转储,当我将其导入生产数据库时,它会自动添加所有表中的所有新字段
  • 那么您需要mysqldump,它可以将数据库的结构+数据转储为SQL语句,您可以将其作为“真实”查询反馈。
  • 我不需要来自开发者数据库的测试数据,我只需要它的结构。并且将此结构(不是数据)导入生产数据库会很酷,并且生产数据库的结构与开发人员相同(不是数据,只有结构)。或者我只是误解了你的帖子:(
  • mysqldump 可以只转储结构。 --skip-data 或类似的东西(目前没有 CLI 访问权限,但请执行 mysqldump --help 以查看所有选项)
【解决方案2】:

alter an existing table

alter table tablename add column newcolumn tinyint(1) default 1 AFTER othercolumn

create a new table

CREATE TABLE  `newtablename` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `newcolumn` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

【讨论】:

    【解决方案3】:
    • 仅复制您可以使用的结构,例如:

      jcho360> create table t3 like t2;

      Query OK, 0 rows affected (0.05 sec).

    如果你想在创建结构后复制内容,你可以使用:

    INSERT INTO t3 SELECT * FROM t2;
    
    • 如果你想复制你可以使用的数据(没有结构,我的意思是 PK、FK 等)

      mysql> create table t4 as select * from t1;

    当然你也可以使用备份来恢复表

    • 如果你想添加新的列,你可以使用

      alter table tablename add column newcolumn vartype;

    如果您想使用来自另一个数据库的表,您可以使用查询先调用数据库,然后再调用名称,例如

    select * from database.tablename;
    

    记住用户也需要其他数据库的权限。

    【讨论】:

    • 像 t2 一样创建表 t3 - 这个查询没问题,但我已经有表 t3 - 我不需要创建它,我只需要修改它的字段,使其与 t2 中的字段相同(但所有数据保持不变)。我可以手动完成,自己指定所有字段,但这需要太多时间,我需要自动完成。
    • 如果你不想硬编码,最好的方法是使用一些带有界面的软件,比如 mysql Administration 或 workbench,你可以在表格上做任何事情。记得在开始编辑之前进行备份。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2015-07-08
    相关资源
    最近更新 更多