栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

执行数据库'INSERT'操作时事务无法回滚

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

执行数据库'INSERT'操作时事务无法回滚

在使用Spring声明式事务的时候,发现在做”update”时,出现异常事务可以回滚,但是在执行”insert”的时候,后台日志虽然显示回滚了,但是数据却已经保存到了数据库中,本来以为是哪里配置出错了,后来却发现是Mysql存储引擎的的问题。我们用的Mysql版本是”5.1.73”,默认存储引擎是”MyISAM”。

查看mysql版本:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.1.73    |
+-----------+
1 row in set (0.00 sec)
查看mysql存储引擎
mysql> SHOW ENGINES;
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine     | Support | Comment   | Transactions | XA   | Savepoints |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES     | Collection of identical MyISAM tables | NO    | NO   | NO  |
| CSV | YES     | CSV storage engine      | NO    | NO   | NO  |
| MyISAM     | DEFAULT | Default engine as of MySQL 3.23 with great performance     | NO    | NO   | NO  |
| InnoDB     | YES     | Supports transactions, row-level locking, and foreign keys | YES   | YES  | YES |
| MEMORY     | YES     | Hash based, stored in memory, useful for temporary tables  | NO    | NO   | NO  |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
5 rows in set (0.00 sec)

到了这里原因就了然了,创建表时默认为”MyISAM”,关于”MyISAM”和”InnoDB”及其他的各种存储引擎的区别这里就不展开了,我们只需要将我们的表的存储引擎改为”InnoDB”就可以了。

SHOW TABLE STATUS FROM database;


ALTER TABLE table_name ENGINE = InnoDB;

mysql> ALTER TABLE table_name ENGINE = InnoDB;
Query OK, 8 rows affected (0.03 sec)
Records: 8  Duplicates: 0  Warnings: 0

如果是主库的话,最好是把默认的存储引擎改为 “InnoDB”。。。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/230546.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号