11

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

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

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

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

所以我需要在删除他的数据的情况下更改表格。有没有办法做到这一点?

4

2 回答 2

21

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

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

  2. 由于您没有声明任何默认值null,因此为该新列设置的所有行。

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

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

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

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

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

于 2011-04-18T17:34:18.393 回答
0

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

于 2011-04-18T07:22:28.560 回答