mysql中两表更新时产生的奇葩问题,产生死锁!

如下一个两表更新语句

UPDATE hzxm201610 a,xmhzylb1201610 b SET a.gk07_1_6=b.gk04_11,a.gk07_2_6=b.f06_1,a.gk07_3_6=b.f07_1,a.gk07_4_6=b.f08_1  where   substring(a.gk01,1,4) in (‘5323‘) and a.gk01=b.gk01 and dqdm=‘532300‘

如果漏掉了where会怎么样:

UPDATE hzxm201610 a,xmhzylb1201610 b SET a.gk07_1_6=b.gk04_11,a.gk07_2_6=b.f06_1,a.gk07_3_6=b.f07_1,a.gk07_4_6=b.f08_1  substring(a.gk01,1,4) in (‘5323‘) and a.gk01=b.gk01 and dqdm=‘532300‘

一般以为是会报错。其实不然,这个语句正常执行!而且对两个表全扫描,最后什么也不做!但是会锁定两个表很长时间,导致应用系统无法工作!

查询mysql死锁的语句:

#Show PROCESSLIST;
SELECT * FROM information_schema.INNODB_TRX;
SELECT * FROM information_schema.INNODB_LOCKS;
SELECT * FROM information_schema.INNODB_LOCK_WAITS;
SHOW VARIABLES LIKE ‘%lock%‘;

时间: 2024-11-01 09:58:44

mysql中两表更新时产生的奇葩问题,产生死锁!的相关文章

MySQL 中两表关联更新数据

通过用户手机号,更新他的添加时间和过期时间,两表关联更改副表内容 UPDATE expand_money e INNER JOIN members m ON e.uid = m.id SET e.add_time=unix_timestamp(),e.expired_time=unix_timestamp()+60*60*24*7 WHERE m.user_phone = '139139139139'

php分享(三十六)mysql中关联表更新

一:关联不同的表更新 1: 通过where关联更新 update student s, city c set s.province_name = c.province_name, s.city_name = c.name where s.city_code = c.code; 2:子查询更新 update student s set city_name = (select name from city where code = s.city_code); 子查询更新优化: UPDATE t_ad

Oracle中如何实现Mysql的两表关联update操作

在看<MySQL 5.1参考手册>的时候,发现MySQL提供了一种两表关联update操作.原文如下: UPDATE items,month SET items.price=month.price WHERE items.id=month.id; 在MySQL中构造表验证了一下 mysql> select * from test; +------+--------+ | id | salary | +------+--------+ | 1 | 100 | | 2 | 200 | | 3

SQL Server中多表连接时驱动顺序对性能的影响

原文:SQL Server中多表连接时驱动顺序对性能的影响 本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 最近在SQL Server中多次遇到开发人员提交过来的有性能问题的SQL,其表面的原因是表之间去的驱动顺序造成的性能问题,具体表现在(已排除其他因素影响的情况下),存储过程偶发性的执行时间超出预期,甚至在调试的时候

MySQL中多表删除方法(转载)

如果您是才接触MySQL数据库的新人,那么MySQL中多表删除是您一定需要掌握的,下面就将为详细介绍MySQL中多表删除的方法,供您参考,希望对你学习掌握MySQL中多表删除能有所帮助. 1.从MySQL数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id 2.从MySQL数据表t1里在数据表t2里没有匹配的记录查找出来并

MySQL中多表删除方法

如果您是才接触MySQL数据库的新人,那么MySQL中多表删除是您一定需要掌握的,下面就将为详细介绍MySQL中多表删除的方法,供您参考,希望对你学习掌握MySQL中多表删除能有所帮助. 1.从MySQL数据表t1中把那些id值在数据表t2里有匹配的记录全删除掉 DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id 2.从MySQL数据表t1里在数据表t2里没有匹配的记录查找出来并

MySQL中数据表的增操作

今天学习到表的增操作,写个博客总结一下,PS:下面所有的注释都是我在电脑上全部操作完成后,再复制到记事本上添加的.至于在执行的时候可不可以那样添加注释,就有待考证了. 选择库 mysql> show databases;#查看目前有哪些数据库存在 +--------------------+ | Database | +--------------------+ | information_schema | | ceshi_ku | | mysql | | performance_schema

MySQL中数据表的查操作

查询数据表的全部内容 mysql> show tables;#查看当前数据库下的所有表 +--------------------+ | Tables_in_ceshi_ku | +--------------------+ | biao | | ceshi_biao | +--------------------+ 2 rows in set (0.00 sec) mysql> select * from biao;#查看该表所有的内容,*代表通配符,在这里是代表所有的列 +------+-

数据迁移之sql server2005 中两表关联更新数据操作

近期在做数据迁移的工作,老系统的数据迁移到新系统,当中麻烦的确不少,因为是重新设计的系统与老系统中有太多的不一至性,例如表结构,字段的处理,像附件的存储方式,还有历史遗留数据... 后面会慢慢的把相关技术处理细节展现出来,当然,难度不大,只是琐碎事情太多. 今天就简单来看看数据的关联更新. 业务场景: 同一个业务,有一张主表及一张子表,字段差不多,只是老系统中主键生成方式GUID,而新的主键生成方式自增长型,这里就不论合不合理了,来看看我们的问题. 我们要做的就是把老数据导入到新表,并且保持他们