mysql表锁为什么不会出现死锁

mysql> insert into real_table select from insert_table;mysql> truncate table insert_table;mysql> unlock tables;innodb 使用行级锁,bdb 使用页级锁。对于 innodb 和 bdb 存储引擎来说,是可能产生死锁的。这是因为 innodb 会自动捕获行锁,bdb 会在执行 sql 语句时捕获页锁的,而不是在事务的...
mysql表锁为什么不会出现死锁
对于mysql来说,有三种锁的级别:页级、表级、行级
页级的典型代表引擎为bdb。
表级的典型代表引擎为myisam,memory以及很久以前的isam。
行级的典型代表引擎为innodb。
-我们实际应用中用的最多的就是行锁。
行级锁的优点如下:
1)、当很多连接分别进行不同的查询时减小lock状态。
2)、如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。
行级锁的缺点如下:
1)、比页级锁和表级锁要占用更多的内存。
2)、进行查询时比页级锁和表级锁需要的i/o要多,所以我们经常把行级锁用在写操作而不是读操作。
3)、容易出现死锁。
对于写锁定如下:
1)、如果表没有加锁,那么对其加写锁定。
2)、否则,那么把请求放入写锁队列中。
对于读锁定如下:
1)、如果表没有加写锁,那么加一个读锁。
2)、否则,那么把请求放到读锁队列中。
当然我们可以分别用low_priority
以及high_priority在写和读操作上来改变这些行为。
如果想要在一个表上做大量的
insert

select
操作,但是并行的插入却不可能时,可以将记录插入到临时表中,然后定期将临时表中的数据更新到实际的表里。可以用以下命令实现:
mysql>
lock
tables
real_table
write,
insert_table
write;
mysql>
insert
into
real_table
select
*
from
insert_table;
mysql>
truncate
table
insert_table;
mysql>
unlock
tables;
innodb
使用行级锁,bdb
使用页级锁。对于
innodb

bdb
存储引擎来说,是可能产生死锁的。这是因为
innodb
会自动捕获行锁,bdb
会在执行
sql
语句时捕获页锁的,而不是在事务的开始就这么做。
行级锁的优点有:
在很多线程请求不同记录时减少冲突锁。
事务回滚时减少改变数据。
使长时间对单独的一行记录加锁成为可能。2019-05-25
mengvlog 阅读 8 次 更新于 2025-07-20 07:43:35 我来答关注问题0
  • 总之,表级锁在MySQL中扮演了关键角色,用于管理并发操作,确保数据一致性。合理利用不同的锁机制,可以有效地避免死锁现象,同时保证系统的高可用性和性能。

  • 2)、如果出现异常,可以减少数据的丢失。因为一次可以只回滚一行或者几行少量的数据。行级锁的缺点如下:1)、比页级锁和表级锁要占用更多的内存。2)、进行查询时比页级锁和表级锁需要的i/o要多,所以我们经常把行级锁用在写操作而不是读操作。3)、容易出现死锁。对于写锁定如下:1)、如果表...

  • 基于锁的粒度分类:表级锁:对整个表上锁,后续事务需等锁释放才能访问,粒度大、加锁简单但易冲突,不会出现死锁,常见于INNODB、MYISAM引擎。页级锁:介于表锁和行锁之间,一次锁定一组数据,并发一般,会出现死锁,如BDB引擎使用。行级锁:锁住表中的一行或多行记录,其他事务可正常访问未锁记录,...

  • 2、各种锁特点 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般 3...

  •  深空见闻 mysql什么情况下会出现锁表

    死锁情况:两个或多个事务互相等待对方释放锁,此时数据库可能会选择锁表以避免死锁扩散。未及时提交的事务:未及时提交的事务会持有锁并阻塞其他操作,可能导致锁表。DDL操作:执行数据定义语言(DDL)操作,如ALTER TABLE,通常会在表级别加锁,以防止在表结构变更期间发生数据不一致的问题。手动加锁:...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部