如何在不丢失数据的情况下修改MySQL表格?

13

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

通过一种方法,我在服务器上运行了以下命令:

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

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

因此,我需要修改表格,而不会删除它的数据。有没有办法可以做到这一点?


2
你的问题不够清楚。你能提供更多关于发生了什么事情的细节吗? - Michael Petrotta
确保不将文本转换为整数(类似于这样的内容) - ajreal
2
请告诉我们您执行了哪种类型的ALTER命令,因为我已经执行了数百个ALTER命令,没有数据丢失。 - bicccio
@大家现在请注意。现在我将更清楚地解释事情。 - user605334
2个回答

23

你的问题非常明显。你正在向表中添加新列,并将其设置为 NOT NULL
为了更清晰地解释,我将解释运行该命令时服务器的反应:

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

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

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

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

有一些好的解决办法:

  • 为您正在创建的列设置默认值(建议)。

  • 创建不带 NOT NULL 的列,设置适当的值,然后使该列 NOT NULL


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

1
你能提供一个例子吗? - Ifan Iqbal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接