(1)InnoDB存储引擎支持事务,而MyISAM不支持事务;
(2)InnoDB支持行级锁,而MyISAM只支持表级锁;
( InnoDB行锁是通过给索引加锁实现的,即只有通过索引条件检索数据,InnoDB才使用行级锁,否则将使用表级锁!行级锁在每次获取锁和释放锁的操作需要比表级锁消耗更多的资源。MySQL表级锁有两种模式:表共享读锁和表独占写锁。就是说对MyIASM表进行读操作时,它不会阻塞其他用户对同一表的读请求,但会阻塞对同一表的写操作;而对MyISAM表的写操作,会阻塞其他用户对同一表的读和写操作。)
(3)InnoDB支持外键,而MyISAM不支持外键;
(4)InnoDB不保存数据库表中表的具体行数,而MyISAM会保存;
( 也就是说,执行 select count(*) from table 时,InnoDB要扫描一遍整个表来计算有多少行,而MyISAM只需要读出保存好的行数即可(内部维护了一个计算器,可以直接调取)。【注】:当count(*)
语句包含where
条件时,两种表的操作是一样的。也就是上述介绍到的InnoDB使用表锁的一种情况。)
对于select ,update ,insert ,delete 操作:
如果执行大量的SELECT,MyISAM是更好的选择(因为MyISAM不支持事务,使得MySQL可以提供高速存储和检索,以及全文搜索能力);
如果执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表(因为InnoDB支持事务,在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了)。
事务就是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
四大特征:
原子性、一致性、隔离性、持久性 (ACID)
原子性:是指整个数据库事务是不可分割的单位。只有使事务中的所有数据库操作都成功,才算整个事务成功。如果事务中任何一个sql语句执行失败,那么已经执行的sql语句也必须撤销,事务状态退回到执行事务之前的状态。
一致性:一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态。在事务开始之前和事务结束之后,事务的完整性约束没有被破坏。
隔离性:一个事务的影响在该事务提交前对其他事物都不可见。——这通过锁来实现
持久性:事务一旦提交,其结果就是永久性的。
MySQL的存储引擎InnoDB使用重做日志(redo log)保证一致性与持久性,
回滚日志(undo log)保证原子性,
使用各种锁来保证隔离性。
参考博客:https://www.cnblogs.com/toria/p/11204226.html
https://www.cnblogs.com/aishangJava/p/11306919.html
原文:https://www.cnblogs.com/yangms/p/14013670.html