开发技术学习 »
数据库 » MySQL中的事务,MySQL更改表类型为MyISAM或InnoDB
MySQL中的事务,MySQL更改表类型为MyISAM或InnoDB
MyISAM有的说不支持,有的说支持
这个用事务和不用事务有什么区别吗?
理解事务
事务的作用主要是在服务器发生错误或崩溃的情况下确保数据库的一致性。事务是一个或一系列的查询,这些查询要么全部执行要么全部不执行。例如,银行转账需要两个过程来完成,首先需从某个账户扣除一定金额,之后在另个账户中增加相同的金额。如果这两个过程不同时执行,从第一个账户中扣除金额后还没来得及增加第二个账户的金额就发生停电或服务器崩溃,这将给用户和银行造成很大的损失。如果采用事务处理上述过程,即使出现上述事故也不会给用户造成损失。一个事务被永久的写入到数据库中称事务提交,将状态重置到事务开始之前的状态称为事务回滚。
事务的特性
事务具有以下4个特性。
原子性:指事务作为一个整体要么完全执行,要么完全不执行。
一致性:指一个事务必须能够使数据处于一致的状态。
孤立性:在事务完全完成之前,他们都是孤立的。
持续性:一旦写入数据库后,事务必须是永久的、持续的。
附 mysql 表类型说明
mysql的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
最常使用的2种存储引擎:
MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法。与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具。 MyISAM表格可以被压缩,而且它们支持全文搜索。它们不是事务安全的,而且也不支持外键。如果事物回滚将造成不完全回滚,不具有原子性。如果执行大量 的SELECT,MyISAM是更好的选择。
InnoDB:这种类型是事务安全的。它与BDB类型具有相同的特性,它们还支持外键。InnoDB表格速度很快,具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它。如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。
对于支持事物的InnoDB类型的标,影响速度的主要原因是AUTOCOMMI,默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打 开也可以),将大大提高性能。
通过以上信息,查看自己项目中的数据表吧!
如果要更改表类型,在这里我也贴出来:
修改 mysql 表类型的 sql 语句:
alter table 表名 type = MyISAM;
alter table 表名 type = InnoDB;