锁模块

108 阅读1分钟

MyISAM和InnoDB关于锁方面的区别是什么?

  • MyISAM默认用的是表级锁,不支持行级锁
  • InnoDB默认用的是行级锁,也支持表级锁

加锁指令

lock table 表名 read; //给表加读锁,读锁也是共享锁
lock table 表名 write; //给表加写锁,写锁是排它锁
unlock tables; //释放锁
for update; //排它锁
show variables like 'autocommit';//查看事务是否默认提交
set autocommit = 0; //关闭自动提交 该设置只对当前会话有效
select * from table_name where id=3 lock in share mode;//加共享锁,其他操作加排它锁加不上,只有提交事务,才可以加

小结

表级锁跟索引无关,InnoDB在不用索引的时候走到就是表级锁。MyISAM默认使用的就是表级锁,不支持行级锁,InnoDB默认使用的是行锁也支持表级锁,无论是表锁还是行锁进分为共享锁和排它锁。增删改都是用排它锁。

MyISAM适用的场景

频繁执行全表count语句,对数据进行增删改的频率不高,查询非常频繁,没有事务

InnoDB适用的场景

数据增删改查都相当的频繁,可靠性要求比较高,要支持事务。

数据库锁的分类

  • 按锁的粒度划分:表级锁 行级锁 页级锁
  • 按锁的级别划分:共享锁 排它锁
  • 按加索方式划分:自动锁 显示锁
  • 按操作划分:DML锁 DDL锁
  • 按使用方式划分:乐观锁 悲观锁