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锁
- 按使用方式划分:乐观锁 悲观锁