2012-03-27 75 views
0

我有一个包含复合主键的表。我正在尝试从文本文件加载数据。 我需要将新值添加到表格的原始值中。使用加载数据添加值

drop table if exists load_data; 

CREATE TABLE `load_data` (
    `zoneid` bigint(20) NOT NULL DEFAULT '0', 
    `creativeid` bigint(20) NOT NULL DEFAULT '0', 
    `count` int(11) DEFAULT NULL, 
    PRIMARY KEY (`zoneid`,`creativeid`) 
) ENGINE=MyISAM; 

insert into load_data values (1200, 2200, 4), (9200, 9200, 91); 

mysql> select * from load_data; 
+--------+------------+-------+ 
| zoneid | creativeid | count | 
+--------+------------+-------+ 
| 1200 |  2200 |  4 | 
| 9200 |  9200 | 91 | 
+--------+------------+-------+ 
2 rows in set (0.00 sec) 

# cat abc1.txt 
1200 2200 8 
9200 9200 7 

以下加载数据将5个计数添加到新值,而不是主键列的唯一组合的原始计数。

load data infile 'abc1.txt' replace into table load_data (zoneid, creativeid, @a) set count = @a+5 ; 

mysql> select * from load_data; 
+--------+------------+-------+ 
| zoneid | creativeid | count | 
+--------+------------+-------+ 
| 1200 |  2200 | 13 | 
| 9200 |  9200 | 12 | 
+--------+------------+-------+ 
2 rows in set (0.00 sec) 

当我尝试将值添加到相应区域和创造性的ID列的原始计数值,我得到的NULL,而不是新的总。

mysql> load data infile 'abc1.txt' replace into table load_data (zoneid, creativeid, @a) set count = @[email protected] ; 
Query OK, 4 rows affected (0.00 sec) 
Records: 2 Deleted: 2 Skipped: 0 Warnings: 0 

mysql> select * from load_data; 
+--------+------------+-------+ 
| zoneid | creativeid | count | 
+--------+------------+-------+ 
| 1200 |  2200 | NULL | 
| 9200 |  9200 | NULL | 
+--------+------------+-------+ 
2 rows in set (0.00 sec) 

预期结果:

mysql> select * from load_data; 
+--------+------------+-------+ 
| zoneid | creativeid | count | 
+--------+------------+-------+ 
| 1200 |  2200 | 12 | 
| 9200 |  9200 | 98 | 
+--------+------------+-------+ 

回答

1

这是因为更换力量,首先删除记录。

要处理它,您可以临时添加新字段并从文件中加载count数据。然后写UPDATE表来计算count字段,然后删除temp。领域。