【问题标题】:How to alter MySQL table without losing data?如何在不丢失数据的情况下更改 MySQL 表?
【发布时间】:2011-04-18 07:16:10
【问题描述】:

在我的应用程序中,我做了一些更改并将它们上传到测试服务器。因为我无法访问服务器数据库,所以我运行ALTER 命令对其进行更改。

使用我在服务器上运行以下命令的方法:

ALTER TABLE `blahblahtable` ADD COLUMN `newcolumn` INT(12) NOT NULL

之后,我发现表的所有数据都被删除了。现在表格是空白的。

所以我需要修改表格而不删除他的数据。有什么办法吗?

【问题讨论】:

  • 你的问题不清楚。你能提供更多关于究竟发生了什么的细节吗?
  • 确保不要将文本转换为整数(类似的东西)
  • 请告诉我们你做了什么改变命令,因为我已经完成了数百个改变命令并且没有数据丢失。
  • @我们所有人现在阅读。现在我更清楚了。

标签: mysql database alter


【解决方案1】:

你的问题很明显。您正在向表中添加一个新列,并将其设置为 NOT NULL
为了更清楚起见,我将解释一下运行命令时服务器的反应:

  1. 您添加了一个新列,因此表的每一行都必须为该列设置一个值。

  2. 由于您没有声明任何默认值,因此所有行都为这个新列设置了null

  3. 服务器注意到表的行在不允许nulls 的列上具有null 值。这是非法的。

  4. 为解决冲突,删除了无效行

对于这个问题有一些很好的修复:

  • 为您正在创建的列设置一个默认值(推荐)。

  • 创建列没有NOT NULL,设置适当的值,然后创建列NOT NULL

【讨论】:

    【解决方案2】:

    您可以创建一个临时表,传递您要更改的表中的所有信息,然后将信息返回到更改后的表。

    【讨论】:

    • 你能提供例子吗?
    猜你喜欢
    • 2012-05-29
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多