在我的应用程序中,我进行了一些更改并将它们上传到测试服务器。由于我无法访问服务器数据库,我会运行 ALTER
命令对其进行修改。
通过一种方法,我在服务器上运行了以下命令:
ALTER TABLE `blahblahtable` ADD COLUMN `newcolumn` INT(12) NOT NULL
之后,我发现表格的所有数据都被删除了。现在表格是空的。
因此,我需要修改表格,而不会删除它的数据。有没有办法可以做到这一点?
在我的应用程序中,我进行了一些更改并将它们上传到测试服务器。由于我无法访问服务器数据库,我会运行 ALTER
命令对其进行修改。
通过一种方法,我在服务器上运行了以下命令:
ALTER TABLE `blahblahtable` ADD COLUMN `newcolumn` INT(12) NOT NULL
之后,我发现表格的所有数据都被删除了。现在表格是空的。
因此,我需要修改表格,而不会删除它的数据。有没有办法可以做到这一点?
你的问题非常明显。你正在向表中添加新列,并将其设置为 NOT NULL
。
为了更清晰地解释,我将解释运行该命令时服务器的反应:
您添加了一个新列,因此表的每一行都必须为该列设置一个值。
由于您没有声明任何默认值,因此所有行都会为这个新列设置null
。
服务器注意到表的行具有不允许null
的列上的null
值。这是不合法的。
为了解决冲突,无效的行被删除。
有一些好的解决办法:
为您正在创建的列设置默认值(建议)。
创建不带 NOT NULL
的列,设置适当的值,然后使该列 NOT NULL
。