mysql中的锁问题 请问为什么在mysql中表锁不会出现死锁而行锁会出现死锁? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为什么说 "mysql中表锁不会出现死锁" ? myisam中的表锁不会出现死锁,而innodb中的行锁会出现死锁? 《深入浅出mysql数据库开发,优化与管理维护》中P263页中讲到的,但我没想明白是为什么? 说说我的看法,不是因为行锁和表锁的原因,倒却是因为是否支持事务的原因。myisam不支持事务,因而在获取锁,进入下一步操作时,直接可以得到状态并返回,而不会形成相互等待。看看这个例子:会话1:mysql> create table t3(id int) engine=myisam;Query OK, 0 rows affected (0.03 sec)mysql> create table t4(id int) engine=myisam;Query OK, 0 rows affected (0.02 sec)mysql> lock tables t3 write;Query OK, 0 rows affected (0.00 sec)会话2:mysql> lock tables t4 write;Query OK, 0 rows affected (0.00 sec)mysql> insert into t3 values(2);ERROR 1100 (HY000): Table 't3' was not locked with LOCK TABLESmysql> insert into t3 values(3 -> );ERROR 1100 (HY000): Table 't3' was not locked with LOCK TABLES紧接着会话1执行:mysql> lock tables t4 write;它会一直等会话2去释放t4表的写锁,如果它一直不unlock呢,它就一直等。然而只要你记得unlock,所有这些等待最终都会消失。需要明确说明的是,这里的等待只是单方面等待,而不会相互等待。与“死锁”有明显区别。紧接着会话2执行:mysql> lock tables t3 write;Query OK, 0 rows affected (0.00 sec)会话1中的lock tables t4 write;会马上成功返回。 有关锁机制的问题,可以详细参看:http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html 关键看死锁怎么理解如果等待不算死锁的话,确实myisam不存在死锁 初始学求教 在本地计算机无法启动MYSQL服务 备份了之后恢复 突然发现这个库不是最新的 表结构和字段 关于页面访问统计存储的MySQL数据库设计构思 公司怎么发布有数据库的软件 请教一个SQL语句查询,谢谢! mysql如何查询某一天所在周的周一至周日的数据? php运行缓慢,MYSQL生成大量SQL临时文件 数据库id自动增长,数据不停的删除和插入,这样的话id字段会不断的变大,直到溢出 关于SparkSql的问题 MYSQL适合多大规模的存储 急急急急急急!高分
myisam不支持事务,因而在获取锁,进入下一步操作时,直接可以得到状态并返回,而不会形成相互等待。看看这个例子:
会话1:
mysql> create table t3(id int) engine=myisam;
Query OK, 0 rows affected (0.03 sec)mysql> create table t4(id int) engine=myisam;
Query OK, 0 rows affected (0.02 sec)mysql> lock tables t3 write;
Query OK, 0 rows affected (0.00 sec)
会话2:
mysql> lock tables t4 write;
Query OK, 0 rows affected (0.00 sec)mysql> insert into t3 values(2);
ERROR 1100 (HY000): Table 't3' was not locked with LOCK TABLES
mysql> insert into t3 values(3
-> );
ERROR 1100 (HY000): Table 't3' was not locked with LOCK TABLES紧接着会话1执行:
mysql> lock tables t4 write;
它会一直等会话2去释放t4表的写锁,如果它一直不unlock呢,它就一直等。然而只要你记得unlock,所有这些等待最终都会消失。
需要明确说明的是,这里的等待只是单方面等待,而不会相互等待。与“死锁”有明显区别。
紧接着会话2执行:
mysql> lock tables t3 write;
Query OK, 0 rows affected (0.00 sec)
会话1中的lock tables t4 write;会马上成功返回。
http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html