mysql的事务处理
2013-04-27《MySQL Crash Course》(中文版《MySQL必知必会》)这本书的后续版本叫做《MariaDB Crash Course》。为何改了个名字呢,这其中是有些典故的。
MySQL之父Widenius先生离开了Sun之后,觉得依靠Sun/Oracle来发展MySQL,实在很不靠谱,于是决定另开分支,这个分支的名字叫做MariaDB。
MariaDB默认的存储引擎是Aria,不是MyISAM。Aria可以支持事务,但是默认情况下没有打开事务支持,因为事务支持对性能会有影响。可以通过以下语句,转换
为支持事务的Aria引擎。 ALTER TABLE tablename ENGINE=MARIA TRANSACTIONAL=1;
事务处理在各种管理系统中都有着广泛的应用,比如人员管理系统,很多同步数据库操作大都需要用到事务处理。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
如果没有事务处理,在你删除的过程中,假设出错了,只执行了第一句,那么其后果是难以想象的!
但用事务处理。如果删除出错,你只要rollback就可以取消删除操作(其实是只要你没有commit你就没有确实的执行该删除操作)
一般来说,在商务级的应用中,都必须考虑事务处理的!
今天发现MYSQL数据库从4.1就开始支持事务功能,5.0引入存储过程;
MYSQL的事务处理主要有两种方法。
1、用begin,rollback,commit来实现
begin 开始一个事务
rollback 事务回滚
commit 事务确认
2、直接用set来改变mysql的自动提交模式
MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行!我们可以通过
set autocommit=0 禁止自动提交
set autocommit=1 开启自动提交
来实现事务的处理。
但注意当你用 set autocommit=0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束,注意当你结束这个事务的同时也开启了个
新的事务!按第一种方法只将当前的作为一个事务!
MYSQL中只有INNODB和BDB类型的数据表才能支持事务处理!其他的类型是不支持的!
既然事务处理和存储引擎息息相关,那么我们在mysql或者mariadb如何查看已经安装的存储引擎呢?
Mysql> show engines;
Mysql> show plugins;
Mysql> SELECT engine,GROUP_CONCAT(DISTINCT TABLE_SCHEMA) Table_Schema_List,COUNT(*) FROM information_schema.tables GROUP BY engine;
MySQL 4.1.2以前版本,可以使用
mysql> show variables like "have_%";
默认存储引擎:
mysql> show variables like '%engine%';
指定存储引擎
CREATE TABLE mytable (id int, title char(20)) ENGINE = INNODB;
你还可以改变现有的表使用的存储引擎,用以下语句:
ALTER TABLE mytable ENGINE = MyISAM