MYSQL ON DUPLICATE KEY UPDATE用于复制表

时间:2011-06-02 10:08:27

标签: mysql

我有2张表,临时表和永久表。 我的目标是将临时数据复制到永久表中,但必须更新永久表。

以下是表格

### Temp. table
CREATE TABLE `tb_temp_data` (
  `key_id` varchar(20) NOT NULL DEFAULT '',
  `h00` int(11) DEFAULT '0',  
  `h01` int(11) DEFAULT '0',  
  `h02` int(11) DEFAULT '0',  
  `h03` int(11) DEFAULT '0',  
  `h04` int(11) DEFAULT '0',  
  `h05` int(11) DEFAULT '0',  
  `h06` int(11) DEFAULT '0',  
  `h07` int(11) DEFAULT '0',  
  `h08` int(11) DEFAULT '0',  
  `h09` int(11) DEFAULT '0',  
  `h10` int(11) DEFAULT '0',  
  `h11` int(11) DEFAULT '0',  
  `h12` int(11) DEFAULT '0',  
  `h13` int(11) DEFAULT '0',  
  `h14` int(11) DEFAULT '0',  
  `h15` int(11) DEFAULT '0',  
  `h16` int(11) DEFAULT '0',  
  `h17` int(11) DEFAULT '0',  
  `h18` int(11) DEFAULT '0',  
  `h19` int(11) DEFAULT '0',  
  `h20` int(11) DEFAULT '0',  
  `h21` int(11) DEFAULT '0',  
  `h22` int(11) DEFAULT '0',  
  `h23` int(11) DEFAULT '0',
  `grand_total` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`key_id`)
) ENGINE=MyISAM;

### Permanant table
CREATE TABLE `tb_permanant_data` (
  `key_id` varchar(20) NOT NULL DEFAULT '',  
  `h00` int(11) DEFAULT '0',  
  `h01` int(11) DEFAULT '0',  
  `h02` int(11) DEFAULT '0',  
  `h03` int(11) DEFAULT '0',  
  `h04` int(11) DEFAULT '0',  
  `h05` int(11) DEFAULT '0',  
  `h06` int(11) DEFAULT '0',  
  `h07` int(11) DEFAULT '0',  
  `h08` int(11) DEFAULT '0',  
  `h09` int(11) DEFAULT '0',  
  `h10` int(11) DEFAULT '0',  
  `h11` int(11) DEFAULT '0',  
  `h12` int(11) DEFAULT '0',  
  `h13` int(11) DEFAULT '0',  
  `h14` int(11) DEFAULT '0',  
  `h15` int(11) DEFAULT '0',  
  `h16` int(11) DEFAULT '0',  
  `h17` int(11) DEFAULT '0',  
  `h18` int(11) DEFAULT '0',  
  `h19` int(11) DEFAULT '0',  
  `h20` int(11) DEFAULT '0',  
  `h21` int(11) DEFAULT '0',  
  `h22` int(11) DEFAULT '0',  
  `h23` int(11) DEFAULT '0',
  `grand_total` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`key_id`)
) ENGINE=MyISAM;

INSERT INTO tb_permanant_data 
       SELECT * FROM  tb_temp_data ;
       ON DUPLICATE KEY UPDATE h00 = ?

我想确保通过将值添加到tb_permanant_data中来更新所有h00直到h23,但我不知道如何做到这一点......

有人可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:2)

INSERT INTO tb_permanant_data SELECT * FROM tb_temp_data 
ON DUPLICATE KEY UPDATE 
  h00 = VALUES(h00),
  h01 = VALUES(h01),
  h02 = VALUES(h02),
  h03 = VALUES(h03),
  h04 = VALUES(h04),
  h05 = VALUES(h05),
  h06 = VALUES(h06),
  h07 = VALUES(h07),
  h08 = VALUES(h08),
  h09 = VALUES(h09),
  h10 = VALUES(h10),
  h11 = VALUES(h11),
  h12 = VALUES(h12),
  h13 = VALUES(h13),
  h14 = VALUES(h14),
  h15 = VALUES(h15),
  h16 = VALUES(h16),
  h17 = VALUES(h17),
  h18 = VALUES(h18),
  h19 = VALUES(h19),
  h20 = VALUES(h20),
  h21 = VALUES(h21),
  h22 = VALUES(h22),
  h23 = VALUES(h23);

注意,表tb_permanant_data可以包含tb_temp_data中不存在的行(id)。