您现在的位置是:网站首页>数据库
记一次MySql多表关联修改问题
【数据库】阿文2019年3月29日987浏览
简介记一篇自己工作中遇到的mysql多表关联修改问题,以及最后的解决方法,时刻提醒自己不要犯类似相同的错误。
记一篇自己工作中遇到的mysql多表关联修改问题,以及最后的解决方法,时刻提醒自己不要犯类似相同的错误。
A表结构:
CREATE TABLE `weijiaofei` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`Areaname` VARCHAR(100) NOT NULL,
`PersonNum` VARCHAR(100) NOT NULL,
`Addresscode` VARCHAR(100) NOT NULL,
`Name` VARCHAR(100) NOT NULL,
`address` VARCHAR(100) NOT NULL,
`town` VARCHAR(100) NOT NULL,
`isyichu` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`Id`),
INDEX `IdentityCard` (`IdentityCard`)
)
B表结构:
CREATE TABLE `weijiaofei_yichu` (
`Id` INT(11) NOT NULL AUTO_INCREMENT,
`AreaCode` VARCHAR(100) NOT NULL,
`PersonNum` VARCHAR(100) NOT NULL,
`Addresscode` VARCHAR(100) NOT NULL,
`Name` VARCHAR(100) NOT NULL,
`address` VARCHAR(100) NOT NULL,
`town` VARCHAR(100) NOT NULL,
`isyichu` VARCHAR(100) NOT NULL DEFAULT '',
PRIMARY KEY (`Id`)
)
其中A表中数据差不多30万条,B表数据差不多20万条,刚开始自己按字面理解写的sql:
update weijiaofei a set a.isyichu='是' where a.PersonNum in(select PersonNum from weijiaofei_yichu where isyichu='')
当时sql执行的时候工具直接卡死没反应,10分钟后强行关闭客户端工具,
执行
select count(0) from weijiaofei where isyichu='是'
发觉查询weijiaofei表时发现很卡,于是执行查询数据库表是不是锁住了.
1.查询是否锁表
show OPEN TABLES where In_use > 0;
2.查询进程(如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程)
show processlist
3.杀死进程id(就是上面命令的id列)
kill id
杀死锁表的进程后 再次执行
select count(0) from weijiaofei where isyichu='是'
发觉很流畅没问题。后面寻思关联修改的修改:
update weijiaofei a,weijiaofei_yichu b set a.isyichu='是' where a.PersonNum=b.PersonNum
当时执行时sql工具卡了一下无反应,过了十几秒后正常,what?这就执行完了? 自己不相信再次执行了一次该语句,发觉没问题已经执行完了。
查看结果:
select count(0) from weijiaofei where isyichu='是'
结果返回:
count(0)
110209
终于完成了数据修改任务。
再次提醒自己不能忘记“in”写法的坑。
标签: mysql
上一篇: 么有了
下一篇: Mysql查询指定库某个表的所有字段
评论文明上网,理性发言0条评论