使用MySQL将数据从一列复制到另一个表中的另一列

时间:2014-08-30 15:30:22

标签: mysql sql

我正在尝试使用MySQL将数据从一个列复制到另一个表中的另一个列但是我导入的表具有一个外键约束阻止我这样做;

以下是我要从(product_code)列

导入的表格

表1

+----+--------------+-------------+-------+--------------+-----------+---------+-------+-------+
| id | product_code | distributor | brand | productname  | wheelsize | pcd_1   | pcd_2 | pcd_3 |
+----+--------------+-------------+-------+--------------+-----------+---------+-------+-------+
|  1 | F7050MHS20A2 | *******     | MAK   | MOHAVE       | 7 x 15    | 5x139.7 |       |       |
|  2 | 3480         | *******     | KFZ   | Winter Steel | 4.5 x 13  | 3x98    |       |       |
|  3 | 3480         | *******     | KFZ   | Winter Steel | 4.5 x 13  | 3x98    |       |       |
|  4 | 3480         | *******     | KFZ   | Winter Steel | 4.5 x 13  | 3x98    |       |       |
|  5 | 3480         | *******     | KFZ   | Winter Steel | 4.5 x 13  | 3x98    |       |       |
|  6 | 3480         | *******     | KFZ   | Winter Steel | 4.5 x 13  | 3x98    |       |       |
|  7 | 3480         | *******     | KFZ   | Winter Steel | 4.5 x 13  | 3x98    |       |       |
|  8 | 3480         | *******     | KFZ   | Winter Steel | 4.5 x 13  | 3x98    |       |       |
|  9 | 3480         | *******     | KFZ   | Winter Steel | 4.5 x 13  | 3x98    |       |       |
| 10 | 3480         | *******     | KFZ   | Winter Steel | 4.5 x 13  | 3x98    |       |       |
+----+--------------+-------------+-------+--------------+-----------+---------+-------+-------+

我想将product_code列复制到sku

表2

+----------+----------+-------+--------------+
| id       | value_id | pid   | sku          |
+----------+----------+-------+--------------+
| 20315857 |   369781 | 41257 | 001          |
| 20315858 |   369782 | 41256 | Config - ST5 |
+----------+----------+-------+--------------+

问题是Table2中的value_id列引用了value_id Table3,所以我要么得到一个外国key restraint errorlock wait timeout

 a foreign key constraint fails (`gravytra_topgear`.`am_finder_map`, CONSTRAINT `FK_MAP_VALUE` FOREIGN KEY (`value_id`) REFERENCES `am_finder_value` (`value_id`) ON D

表3

+----------+-----------+-------------+----------------+
| value_id | parent_id | dropdown_id | name           |
+----------+-----------+-------------+----------------+
|     6771 |         0 |           4 | AC             |
|     6749 |         0 |           4 | Acura USA      |
|     6895 |         0 |           4 | Aixam          |
|     6872 |         0 |           4 | Alfa Romeo     |
|     6853 |         0 |           4 | Alfa Romeo USA |
|     6772 |         0 |           4 | Alpina         |
|     6815 |         0 |           4 | AMC USA        |
|     6854 |         0 |           4 | Anhui Anchi    |
|     6928 |         0 |           4 | Ariel          |
|     6783 |         0 |           4 | ARO            |
+----------+-----------+-------------+----------------+

这是我的查询

INSERT INTO table2 (sku) SELECT product_code FROM table1;

table1 product_code列中包含超过200万条记录,导致我的服务器在查询过程中崩溃。

我知道必须有一个更好的方法来做到这一点,但我不知道如何可能,如果可能请求一些帮助,请...?

3 个答案:

答案 0 :(得分:1)

对我而言,您的查询看起来不错。

尝试打破"插入 - 选择"在where子句中使用一些id或在select中使用limit。

插入100条记录。看看它如何。检查你的time_out变量。如果需要,可以相应增加。

答案 1 :(得分:0)

您正在尝试向table_1插入许多不同的列,但您没有从第一个表中选择那些列。因此,当您插入4时,您将插入一列。我认为您正在寻找的是:

INSERT INTO table_1(name) SELECT firstname FROM table_2;


如果您想拥有其他3列的默认值,您也可以轻松地将它们放入选择查询中:

INSERT INTO table_1(value_id, parent_id, dropdown_id, name) 
  SELECT  default_id, default_parent_id, default_dropdown_id, firstname
  FROM table_2;

只需将default_ ID替换为您自己的默认值,无论它们是什么。

答案 2 :(得分:0)

修复很简单,

将查询包装在内:

SET AUTOCOMMIT = 0;
SET FOREIGN_KEY_CHECKS = 0;
SET UNIQUE_CHECKS = 0;

# YOUR QUERIES HERE...

SET AUTOCOMMIT = 1;
SET FOREIGN_KEY_CHECKS = 1;
SET UNIQUE_CHECKS = 1;

数据进入,只有难度是数据集的大尺寸,但将其分成块有助于实现。