mysql innodb的区别?
MySQL存储引擎MyISAM与InnoDB的区别
一、InnoDB支持事务,MyISAM不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了。
二、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及设计到安全性就高的应用。
三、InnoDB支持外键,MyISAM不支持。
四、MyISAM是默认引擎,InnoDB需要指定。
五、InnoDB不支持FULLTEXT类型的索引。
六、InnoDB中不保存表的行数,MyISAM只要简单的读出保存好的行数即可。
七、对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引。
八、清空整个表时,InnoDB是一行一行的删除
九、InnoDB支持行锁。
mysql的innodb添加了事务为什么还会出现数据丢失问题?
会话的隔离级别设置为serializable的时候,其他会话对该表的写操作将被挂起;但是还是可以读取数据的,因此根据读取的数据做更新还可能会有问题。应用程序中为了防止核心数据被并发修改,一般在查询数据的语句中增加for update的选项,从数据库层面避免造成同一条数据被两个事务同时进行操作。
Mysql-InnoDB分表真的有意义吗?
分表可以从很多方面提升性能,需要正确的理解这种方法提升性能的原理。
题主举的例子,对数据库的原理了解太少了。
Innodb的行级锁是通过对索引项加锁来实现的,分表但对数据文件大小有影响,他们对应的索引大小也不同,更小的索引,会有更高的性能,在加锁时自然性能会更高。
数据库查询基本都围绕索引做优化,如果某个高频业务出现了不使用索引,直接全表扫描,那是不可接受的。分表提高查询性能的原理在于两点:缩小索引大小和数据文件大小。
另外,对于分库分表,最重要的是分表维度,以哪些数据项作为分表的依据,对性能的影响至关重要,不恰当的分表方法,不但不会提升性能,甚至会降低性能。

