环境:mac os10.12 ,intel 2.7G CPU,mysql 5.7,navicat for mysql 11.2,且mysql 作了相关优化,如下图(均在本机使用,小本内存16G):
1、需求:
两表(a/b表)字段均为:id/name/age,因a表数据正确 ,但b表name、age等数据与a表相比,有缺失,但2表id均是一样的,未作外键操作,也未作索引,在a表100行,b表300万行。
现在想让b表的name/age与a表保持一致,所以根据id来update实现:
方法一:update a,b set a.name=b.name on a.id=b.id;
方法二:update a SET t1.`name`= t2.name from a as t1 inner JOIN b as t2ON t1.ID =t2.ID;(换left join 或 right join均结果一样)
最后没办法,就用select看看:
SELECT a.ID,a.name,b.ID,b.name FROM a left JOIN b on a.ID=b.ID;
照样报“Lost connection"错误!
后想对ab表作索引,也报同样错误。
2、优化:
按网络上各种方法对my.cnf作了优化,如下图:
3、在mysql终端上操作,等半小时后,电脑没在运行,也不报错,更没结果。
求教各位大神,有何办法,update百万级大表。相信不是mysql的问题,而是哪儿没掌握好方法。
php.循环来更新只在本地数据库里操作,不想弄得更复杂a100行??sql都有问题能否指出哪儿有问题?
连接问题吧
UPDATEa,bseta.name=b.namewherea.id=b.id
回复<aclass="referer"target="_blank">@zerov:你那两个SQL都是错的啊这个是我用的第一个方法,照旧报错误两个sql都是错的诶大哥。命令行不行就用可视化工具吧。navicat什么之类的。
UPDATEat1
INNERJOINbt2ONt1.ID=t2.id
SETt1.name=t2.name
熟悉的错误,不一样的方法
<imgalt=""height="204"src="https://static.oschina.net/uploads/space/2017/0627/115550_okOo_2538398.png"width="336">
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。