今天在给sdcms项目的商品管理模块添加事物控制时发现,使用了各种装饰和with方法以及手动控制事物后依然没回滚,一度让我很迷茫。最后开始怀疑是不是mysql的问题,果然检查了mysql的存储引擎后发现,mysql默认引擎是MyISAM,但是它不支持事物,只有使用InnonDB引擎才行。此时我想起了以前遇见过这个问题,许久不用给忘记了。

解决方法

1.查看引擎

mysql> show engines;
EngineSupportCommentTransactionsXASavepoints
MyISAMDEFAULTDefault engine as of MySQL 3.23 with great perform...NONONO
CSVYESCSV storage engineNONONO
MRG_MYISAMYESCollection of identical MyISAM tablesNONONO
BLACKHOLEYES/dev/null storage engine (anything you write to it...NONONO
FEDERATEDNOFederated MySQL storage engineNULLNULLNULL
InnoDBNOSupports transactions, row-level locking, and fore...YESYESYES
ARCHIVEYESArchive storage engineNONONO
MEMORYYESHash based, stored in memory, useful for temporary...NONONO

发现,我的mysql的InnoDB引擎没启动。

2.启用引擎

找到配置文件my.ini,将skip-innodb这行注释掉或删掉,然后重启mysql,即可。

3修改表的存储引擎。

修改存储引擎,可以用命令Alter table tableName engine =engineName