最近工作使用PHP操作MYSQL时遇到一个BUG 事务控制居然失效了,出现异常居然没有回滚数据.
后面经过别人提示是MySQL存储引擎的原因:
存储引擎:
mysql的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
最常使用的2种存储引擎:
1.Myisam是Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。每个MyISAM在磁盘上存储成三个文件。文件名都和表名相同,扩展名分别是.frm(存储表定义)、.MYD(MYData,存储数据)、.MYI(MYIndex,存储索引)。数据文件和索引文件可以放置在不同的目录,平均分布io,获得更快的速度。
2.InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
查看系统支持的引擎:
show engines;
查看指定表的引擎:
show create table `table_name`;
修改表的存储引擎:
alter table `table_name` type=InnoDB;
其中有一张表的引擎使用的是MyISAM,将其修改为InnoDB引擎