mysql部分引擎支持事务,通常支持事务所使用的引擎为innodb

1、查看一个表的引擎:

可直接使用show create table table_name命令,直接查看表的引擎

2、修改一个表的引擎:

alter table table_name engine = innodb;

如上,会设定table_name这个table 的engine为innodb

需要注意的是,修改table engine时,可能由于key的问题导致修改失败,必要时请查看相关错误提示(例如myisam的fulltext key 就不能在innodb中使用,可以考虑删除fulltext index)





事务通常包括如下一个操作:

1、开启事务

2、执行事务内操作

3、保存事务

4、回滚事务

5、保存回滚点



通常执行为

mysql > begin; //start transaction;也行

开启了一个事务

mysql > savepoint start;

创建了一个回滚点

mysql > insert into user values(‘mario’);

插入一条数据

mysql > savepoint insert_a;

mysql > insert into user values(‘may’);

插入第二条数据

mysql > savepoint insert_b;

mysql > insert into user values(‘foobar’);

插入第三条数据

mysql > savepoint insert_c;

mysql > rollback to insert_b;

这样,新插入的foobar就会被删除

mysql > rollback to insert_a

新插入的may会被删除

此时不能再rollback to insert_b

只能继续rollback或者commit



需要注意的是,事务的rollback,是针对数据的rollback,如果表的机构发生变化,那么无法rollback回去了

mysql 中,truncate语句的显示形式是清空了表数据,实际上是进行了表的drop,然后重新创建了表,所以表内的数据是空的,此时使用rollback,尝试将数据恢复是不可能的了,但是如果使用delete from table_name,则会将所有的记录删除,再在不修改表结构的情况下,使用rollback命令,可恢复之前已经delete的数据了。



commit可设定为自动commit,如果发生数据变更,则立即更新commit,通常设定为:

set autocommit = 0;即可

不建议使用autocommit