PHP在迁移失败的情况下恢复数据

时间:2015-12-24 13:51:55

标签: mysql sql sql-update migration alter-table

我与供应商的表格具有以下结构:

enter image description here

注意提供者字段。现在是VARCHAR。我必须从另一个开发人员那里支持这个系统,现在我们需要有提供者列表并存储其他信息,所以我创建了另一个实际存储提供者的表。

它具有以下结构: id,name,margin,outer_name等

我计划将提供商的类型更改为INT(32),它将指向提供商表。

问题在于MySQL不支持更改数据库结构的事务。

如果我将字段类型从字符串更改为整数,则会丢失以前的所有数据。如果中间出现问题。我输了。

是否可以使用序列化将数据转储到文件并从那里读取它们?

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

请按照以下步骤将数据迁移到新表并更改列。

<强> 1。将所有数据插入新表(提供者表)

INSERT INTO providerTable (NAME) 
SELECT DISTINCT provider
FROM suppliers;

<强> 2。将providerID更新为Main(Supplier)表

UPDATE suppliers s 
INNER JOIN providerTable p ON s.provider = p.name 
SET s.provider = p.id;

在更改表格之前,请将您的数据验证到供应商表格中。

第3。然后更改Main(Supplier)表的列数据类型

ALTER TABLE suppliers CHANGE provider provider INT(4) NOT NULL

使用此方法,您无需备份表。您不会丢失任何数据。