您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

MyISAM和Innodb的区别

bubuko 2022/1/25 20:09:14 其他 字数 1202 阅读 825 来源 http://www.bubuko.com/infolist-5-1.html

MyISAM和Innodb是mysql数据库前后的两种默认数据存储引擎,那么两者究竟有什么区别呢? 一,首先是在锁的方面 MyISAM之可以使用表级锁,不支持使用行级锁。这是什么意思呢? 在MyISAM数据库执行读请求期间,会默认对该请求加上共享锁(读锁),在这一个锁级别下,用户可以进行读共享不可以 ...

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支持

MyISAM和Innodb的区别

原文:https://www.cnblogs.com/ffdsj/p/12386051.html


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶