mysql - 如何在不丢失数据的情况下更改 MySQL 表?

标签 mysql database alter

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

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

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

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

所以我需要在删除他的数据的情况下更改表。有什么办法吗?

最佳答案

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

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

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

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

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

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

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

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

关于mysql - 如何在不丢失数据的情况下更改 MySQL 表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5699677/

相关文章:

php - 添加数据时的SQLSTATE [42000]

php - mysql_query 语法首选项和错误原因

mysql - 隔离级别是否仅适用于 SELECTS 而不适用于 UPDATES?

database - Apache Storm - 从 SPOUT 访问数据库 - 连接池

mysql - 在mysql上运行common "alter table"命令返回 "no database selected"错误

mysql - 如何重置MySQL中的auto_increment值

mysql - 在sql子查询中访问变量

mysql - SQL - 如何从表中的指定位置选择下一个最新的10条记录?

MySQL 内部连接结果

mysql - 更改表添加主键无法识别MySQL