锁:主要作用是管理共享资源的并发访问,还可以用于实现事务的隔离性。
锁的类型:
共享锁(也称读锁)
独占锁(也称写锁)
阻塞:一个事务中的锁需要等待另一个事务中的锁释放所占用的资源,这样会形成阻塞。
死锁:两个及以上事务在执行过程中相互占用了对方等待的资源而产生的异常
数据库系统会在死锁的事务中,找到一个占用资源最少的事务进行回滚操作,从而自动解决死锁。
MyISAM
MySQL5.5 之前版本默认存储引擎。其特性有:
1.并发性与锁级别:使用的是表级锁,对其修改需要加锁,读写也需要加共享锁。
2.表损坏修复:对意外关闭的表可以进行检查和修复,并不是事务恢复,所以可能引起数据丢失。
check table tablename
repair table tablename
3.MyISAM表支持数据压缩
适用场景:
1. 非事务型应用
2. 只读类应用:共享锁之间不会被阻塞
3.空间类应用:例如GPS数据等的计算
Innodb
MySQL5.5 及之后版本默认存储引擎。其特性有:
1.支持事务,完全支持事务的ACID特性
为了实现事务的原子性,一致性,持久性,innodb 使用了两个日志类型来实现:Redo Log(持久性) 和 Undo Log
2.有自己的表空间
3.支持行级锁,执行写操作时需要的资源更好,可以最大程度的支持并发,其行级锁是由存储引擎层实现的
还有很多别的存储引擎,例如等:
CSV: 可以将CSV文件作为MySQL表来处理。
Archive:可以对表数据进行压缩