我与供应商的表格具有以下结构:
注意提供者字段。现在是VARCHAR
。我必须从另一个开发人员那里支持这个系统,现在我们需要有提供者列表并存储其他信息,所以我创建了另一个实际存储提供者的表。
它具有以下结构: id,name,margin,outer_name等
我计划将提供商的类型更改为INT(32)
,它将指向提供商表。
问题在于MySQL不支持更改数据库结构的事务。
如果我将字段类型从字符串更改为整数,则会丢失以前的所有数据。如果中间出现问题。我输了。
是否可以使用序列化将数据转储到文件并从那里读取它们?
有没有更好的方法呢?
答案 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
使用此方法,您无需备份表。您不会丢失任何数据。