更新限制或类似的东西

时间:2014-07-10 10:41:19

标签: mysql sql

查询:

update cities c
inner join regions r on (c.region = r.region_id and c.code = r.country_code)
set c.region_id = r.id;

城市中有300万条记录,因此MySQL服务器在执行期间失败。

有限制使用它的方法吗?每10万条记录?

或执行该查询的任何其他方式?

城市表架构

CREATE TABLE `cities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `code` varchar(3) NOT NULL,
  `city` varchar(30) NOT NULL,
  `native_city` varchar(30) DEFAULT NULL,
  `region` int(11) DEFAULT NULL,
  `population` int(11) DEFAULT NULL,
  `lat` decimal(9,7) DEFAULT NULL,
  `lon` decimal(9,7) DEFAULT NULL,
  `country_id` int(11) NOT NULL,
  `region_id` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3173959 DEFAULT CHARSET=utf8

country_idregion_id不是外键。只是空字段,我想用其他表中的值填充,然后我添加fk

1 个答案:

答案 0 :(得分:1)

正如MySQL UPDATE Syntax

中所述
  

对于多表语法,UPDATE更新每个名为的表中的行   在table_references中满足条件。每个匹配的行是   更新一次,即使它多次符合条件。对于   多表语法,ORDER BY和LIMIT不能使用。

但是您可以将ORDER BY和LIMIT隐藏到子查询中,然后将其与原始表一起加入以进行更新。这是一个例子:

update cities c
inner join 
   (select c1.id,r.id as r_id from cities c1
      inner join regions r on (c1.region = r.region_id 
                               and c1.code = r.country_code)
      order by c1.id
      LIMIT 1000
   ) c2 on   c.id=c2.id 
set c.region_id = c2.r_id