MySQL之事务编程(二)事务控制语句

来源:互联网 发布:网络英雄洛克人 编辑:程序博客网 时间:2024/05/21 09:25

MySQL里面默认的事务是自动提交的。即执行SQL语句后就会马上执行COMMIT操作。因此我们要显示的开启一个事务实用命令BEGIN和START TRANSACTION,或者去执行AUTOCOMMIT=0,MySQL数据库默认的AUTOCOMMIT的值为1,表示默认为自动提交。下面我们来看看相关的事务控制语句:

1、START TRANSACTION | BEGIN

显示的开启一个事务。

2、COMMIT和COMMIT WORK

在completion_type=0时,两者一样的效果。但是当completion_type=1时,两者效果存在区别,为1时,COMMIT WORK等同于COMMIT AND CHAIN,开启一个链事务。当completion_type=2时,COMMIT WORK等同于COMMIT AND RELEASE,当事务提交后就会自动断开于服务器的链接。

3、ROLLBACK和ROLLBACK WORK

回滚

4、SAVEPOINT identifier:

保存节点

5、RELEASE SAVEPOINT identifier

释放节点信息,通常与控制语句SAVEPOINT identifier一起用。如果没有相应的节点则会返回一个错误。

6、ROLLBACK TO [SAVEPONT] indentifier

回滚道相应的节点

7、SET TRANSACTION

用来设置事务的隔离级别

8、案例分析:

EG1::

(1)create table t( a intm primary key(a) );   (2)set @@completion_type=1;  (3)BEGIN;  (4)INSER INTO t value(1);  (5)COMMIT WORK;     (6)INSER INTO t value(2);   (7))INSER INTO t value(1);  (8)ROLLBACK   (9)SELECT * FROM t;

completion_type设置为1,表示COMMIT WORK会自动开启一个链事务,所以在7会提示重复主键,而回滚后第一个2也没有插入到表中去。

EG2:

(1) set @@completion_type=3; (2) BEGN; (3)INSER INTO t value(3);   (4)COMMIT WORK;    (5) select @@version \G;

执行第(5)时,我们会发现有错误,事实上是因为执行第(4)后,会断开链接。

EG3:

ROLLBACKTO SAVEPOINT命令并不是真正地结束了事务,如果此时查询结果,在此之前如果没有提交的事务也不会得到提交,查询相应的数据会发现数据库里面没有你想要的数据。

写于2013年10月24日

原创粉丝点击