mysql 事务 与 数据库引擎

来源:互联网 发布:array push 二维数组 编辑:程序博客网 时间:2024/06/12 22:32
mysql版本:Server version: 5.1.73 Source distribution

今天测试JTA/JDBC安装了mysql数据库,发现事务总是不生效,后发现是mysql默认的数据库引擎造成。
如果你用的是mysql数据库,您开发过程中用到事务,那么您首先要查看您的数据库中表的引擎类型是否支持事务类型,否则你写的事务操作不起作用!

存储引擎是什么?

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据,又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。

这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySQL默认配置了许多不同的存储引擎,可以预先设置或者在 MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。



登录:mysql -u root -p;
查看mysql的所有数据库引擎:SHOW ENGINES;
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         |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
其中MyISAMInnoDB是两种最常用的数据库引擎,默认的引擎是MyISAM,性能最好,但不支持事务处理,只有InnoDB支持事务
根据介绍可知,CSV引擎是以逗号分割的存储方式,MEMORY是内存存储方式(适用于于临时表)。
如果需要事务处理(含XA)就必需使用:InnoDB

查看wangpl数据库下user表的引擎:show create table wangpl.user;
修改wangpl数据库下user表的引擎:ALTER TABLE wangpl.user ENGINE=INNODB;


0 0