您现在的位置是:网站首页>数据库

记一次MySql多表关联修改问题

数据库阿文2019年3月29日3204浏览

简介记一篇自己工作中遇到的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

2

上一篇: 么有了

下一篇: Mysql查询指定库某个表的所有字段

评论文明上网,理性发言0条评论