MySQL 存储引擎是 myisam,Laravel 的事务还有效?
问题出现情况,
最近用java重写了PHP的代码,发现代码里面用了事务。
大概是在一张表里面插入一条数据获得自增id,这个id更新另外表的一个字段
try {
DB::beginTransaction();
//此处是sql
DB::commit();
}catch(\Exception $e){
DB::rollback();
return false;
}
后来发现在java中事务没有效果,java解释说,mysql的myisam是不支持事务的,所以在java中加了事务也没有效果。
然后我查了mysql官网确实 myisam 不支持事务
https://dev.mysql.com/doc/refman/5.7/en/st...
我想问这个事务在 laravel 中会有效果?
高认可度评论:
laravel 的事务 最后走的是 PDO的
事务会在不支持的数据库返回false,所以对于myisam来说没有事务,最后结果是false
参考资料:
https://github.com/JetBrains/phpstorm-stub...
https://blog.csdn.net/jiuyue9561/article/d...
laravel 的事务 最后走的是 PDO的
事务会在不支持的数据库返回false,所以对于myisam来说没有事务,最后结果是false
参考资料:
https://github.com/JetBrains/phpstorm-stub...
https://blog.csdn.net/jiuyue9561/article/d...
当然不会有呀
myisan 有表锁, innodb 支持事务(网上一大堆)
额, 平时用的事务是行级锁, myisan 是表级锁,
区别是
锁住整个表(不支持高并发)
锁住一行(支持高并发)
这个是数据库表引擎问题,换任何语言、框架都不支持
这个归根结底还是看数据库引擎,和语言/框架无关
mysql默认存储引擎是myisam时,事务回滚那些是不支持的
mysql默认存储引擎是innodb时,指定单独表的存储引擎是myisam时也不支持
myisam不回滚删除插入的数据
innodb事务回滚时id是被用掉的