2012-03-27 67 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。領域。