InnoDB: 增、改的效率相对较高2.支持事务3.有支持行级锁和表锁4.自增列 没搞明白 5.表行数每次扫描全表计算
MyISAM:1.查询的效率更高,2.不支持事务功能3.只支持表锁4.自增列 没搞明白 5.表行数会保存一个表行数,但是如果出现where条件是两个一样
mysql 的MyISAM的锁机制:
分为读锁和写锁,在读锁和写锁之间,写速的优先级更加高,所以这也是MyISAM不适合用于多更新和插入的表,因为在默认的情况下MyISAM引擎认为写和更新的操作更加重要,会让读取等待,在过多写入的操作下读取可能出现无限等待的情况。
当使用LOCK TABLES时,不仅需要一次锁定用到的所有表,而且,同一个表在SQL语句中出现多少次,就要通过与SQL语句中相同的别名锁定多少次,否则也会出错!
读锁:当session1回话获取到了一张表的读锁的时候,session1这个只能读取获取到了锁的表,同时也不能进行写入操作,session2可以对session1获取到锁的表进行读取,也可以对其他的表进行读取,但是对锁在session1获得到锁的表的写入得等session2拿到session1释放的锁后才可以写入
写锁:当session1获取到a表的锁之后session2是不可以对a表进行读取的,得等到session1释放锁后才能读取操作
并发写入:可以设置一个属性,属性值有0,1,2三个属性0:不支持并发写入1:默认选项,在没有空洞(标的中间没有被删除的情况)的情况下支持线程a拿到锁之后,线程b可以在表的末尾进行插入操作,但是更新操作得等线程b拿到线程a释放的锁之后才能更新2:忽略空洞情况允许在表的末位插入操作,更新操作同1(使用2的时候应除以定时清除表中的空洞)