1
 mysql> desc oldtable;
 +---------------+--------------+------+-----+---------+----------------+
 | Field         | Type         | Null | Key | Default | Extra          |
 +---------------+--------------+------+-----+---------+----------------+
 | uid           | int(11)      | NO   | PRI | NULL    | auto_increment |
 | active        | char(1)      | NO   |     | NULL    |                |
 | field3        | char(256)    | NO   |     | NULL    |                |
 | field4        | char(256)    | NO   |     | NULL    |                |
 +---------------+--------------+------+-----+---------+----------------+


 mysql> desc newtable;
 +------------+--------------+------+-----+---------+----------------+
 | Field      | Type         | Null | Key | Default | Extra          |
 +------------+--------------+------+-----+---------+----------------+
 | uid        | int(11)      | NO   | PRI | NULL    | auto_increment |
 | active     | tinyint(1)   | NO   |     | 0       |                |
 | field5     | int(12)      | NO   |     | 0       |                |
 | field6     | varchar(12)  | NO   |     | 0       |                |
 | field7     | varchar(12)  | NO   |     | 0       |                |
 +------------+--------------+------+-----+---------+----------------+

这类似于我之前的查询通过脚本更改字段和端口 mysql 表数据? [我想将旧表中的数据(转储)移植到新表中。一个问题是,早先该表使用 char(1) 来存储值“Y”或“N”的活动。现在 newtable 将其存储为 int 1 或 0。

在移植数据之前如何解决这个问题?我应该使用 shell 脚本进行此类修复和移植吗?任何示例脚本或提示:)]

但是这个问题,如果两个表有不同的 no.of 字段,如何实现相同的移植?

4

1 回答 1

1

答案类似于上一个问题的答案:

INSERT INTO newtable (uid, active, field5, field6, field7 )
SELECT uid,FIELD(active,'Y') as active, 0,'',''
FROM oldtable

然后用新的字段值更新 newTable:

update newTable
set 
  field5 = (select someExpression from someTable5 t where t.uid=newTable.uid),
  field6 = (select someExpression from someTable6 t where ...),
  field7 = (select someExpression from someTable7 t where ...)

此外,您可以将新字段定义为允许为空,并使该字段没有值。

于 2012-04-30T07:17:16.697 回答