今天无意间发现一段netcore使用事务的代码,同样的写法在mssql中是有效的,而放在mysql数据库中就没效果,怎么样都会直接提交。奇怪得很以为代码有问题
using (TransactionScope Scope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
{
if(true)
{
Scope.Complete();
return; //(shopResult?.ToString(), request.UserId);
}
}
最后搜索到篇文章,讲到数据表存储类型的问题,还真是坑。
https://www.cnblogs.com/wahaccp/p/3894243.html
就像文中提到的
MySQL数据库默认的存储引擎类型是MyISAM,这种存储引擎类型不支持事务处理。
在MySQL中,只有InnoDB存储引擎类型的数据表才能支持事务处理。
因此,如果想让MySQL支持事务处理,只要将数据表修改为InnoDB存储引擎类型即可
修改MYSQL的配置文件
创建新表时将使用的默认存储引擎
default-storage-engine=InnoDB
改完数据表默认InnoDB类型mysql要重启一下才会再建表时生效
由于是刚切换mysql数据库使用没多少个项目,一直也没注意,以此记录。