1、mysql事务的四大特性:
1:原子性:由于事务的操作是原子级别的,所以在整个事务中对数据库的操作要么同时完成,要么同时失败;失败之后就会回滚到事务操作之前的状态。
2:一致性:事务操作前后,数据库的完整性约束不变。举个例子,A给B转账100块钱,事务操作前,a+b=c,事务操作后,(a-100)+(b+100)=c,事务操作前后,a,b加起来的钱数不变
3:隔离性:事务和事务之前是相互隔离,互不干扰的
4:持久性:事务一旦操作成功,事务对数据的修改就会永久的保存在数据库中。
2、mysql的事务隔离机制
1:读未提交数据:容易产生脏数据,安全等级最低。举个例子,在A事务下,a为10,我修改成100,还未来得及提交,在B事务下,查询到的a就是100;
2:不可重复读:解决了脏读,但是不能重复读取;举个例子,在A事务下,a为10,我修改成100,不提交。在B事务中读取的还是10,但是当A事务提交后,B事务再读取,a还是为10;
3:可重复读:解决了脏读,结局了不可重复读,但是会产生幻读;幻读是用户读取到某一范围数据时,另一事物又在该范围内插入了新行,当用户再次读取该范围的数据行时,就会产生幻读;举个例子:A查看自己工资卡上的消费记录,查询到当月的消费总额(select sum(account) from table where month = '本月')为80元,这时B在外面用A的工资卡消费了300元,再次查询当月的消费总额(select sum(account)from table where month='本月')为380元,因为在table表中month='本月'的条件下,就新增了一条消费300元的记录;mysql中默认的隔离机制是可重复读,它自带的有mvvc多版本并发控制机制用来解决幻读问题.
4:序列化:安全等级最高,能解决一切问题,是Oracle数据库默认的隔离机制。具体操作是:他会序列化同步,让事务进入到一个队列中,一个一个的执行不能并发执行,所以效率会很低。
3、mysql的存储引擎
1:ISAM引擎在设计的时候就考虑到了数据库被查询的次数要远远大于修改次数,所以ISAM的查询速率非常快,而且不占用大量的内存和资源;但是ISAM不支持事务处理,也不能容错。如果你的硬盘崩溃了,那么数据文件就无法恢复。处理办法就是经常备份你所有的实时数据,通过其复制特性来备份数据库。
2:MyISAM引擎是ISAM引擎的扩展,在其基础上提供了ISAM引擎没有的索引和字段管理功能,MyISAM还是用一种表格锁定机制来优化多个并发的读写操作,但是会浪费空间,需要经常经常运行optimize table命令来恢复空间。
3:memory引擎允许只驻留在内存里的临时表格,所以速度比ISAM和MyISAM都快,但是管理的数据极其不稳地,如果在关机之前没有进行保存,所有的数据都会丢失。在删除数据的时候,memory引擎不会浪费大量的空间。
4::InnoDB引擎支持事务处理和外键,容灾性比较好,所以速度会比ISAM、MyISAM慢;事务控制是通过多版本并发控制实现的。mysql默认的存储引擎是InnoDB。
InnoDB和MyISAM的区别:
1::InnoDB不支持全文索引
2::InnoDB不保存表的具体行数(例子:执行select count(*) from table是,InnoDB会扫描整个表来计算行数,而MyISAM可以直接获取行数)
3:InnoDB支持事务和外键,MyISAM强调的是性能,不支持事务和外键但执行速度比InnoDB快。