MyISAM和Innodb是mysql数据库前后的两种默认数据存储引擎,那么两者究竟有什么区别呢?
一,首先是在锁的方面
MyISAM之可以使用表级锁,不支持使用行级锁。这是什么意思呢?
在MyISAM数据库执行读请求期间,会默认对该请求加上共享锁(读锁),在这一个锁级别下,用户可以进行读共享不可以进行写请求。当然我们也可以使用Local tables <tableName> read|write来将表的锁住,阻塞其他的读或者写请求解锁是<unlock tables>。
同样如果MyISAM还自带排他锁,也就是写锁。意思就是当数据库在执行写请求时不允许用户其他请求的干扰。也就是上了共享锁之后可以继续上共享锁,但是上了写锁之后不能施加任何锁。
Innodb默认使用行级锁,但是也支持表级锁。实际上这也是Innodb能够保证事务不出问题的真正原因。
Innodb是支持事务的,所以我们可以通过session取锁暂时不自动提交的方式模拟并发访问的过程。
Innodb加锁默认的是加二级锁,我们可以在使用set autocommi=0关闭当前事务的自动提交,这样就需要在执行事务之前加锁(lock in share mode为手动加共享锁,for update 为手动加排他锁,commit之后进行统一解锁。)比如 我们可以select * from <tableName> where id =3 lock in share mode。只要不执行commit,这行就会永远的锁下去,同理,我们也可以使用for update为他手动添加排他锁。commit时,锁才会被释放。
二,count运算上的区别:
因为MyISAM有meta-data,所以全量查询很快,但是INNODB没有
三,事务与安全:
MyISAM性能会更快,但是不支持事务,INNODB支持事务,所以也支持事务相关的,隔离,回滚,等等的ACID操作
四,MyISAM不支持外键,INNODB支持
原文:https://www.cnblogs.com/ffdsj/p/12386051.html