SELECT @@AUTOCOMMIT; 查看MySQL是否自动提交事务 0表示手动提交事务 1表示自动提交事务
SET AUTOCOMMIT = 0; 设置事务提交方式
SELECT @@TRANCTION_ISOLATION;查询事务的隔离级别
SELECT @@GLOBAL.TRANCTION_ISOLATION;查询全局事务的隔离级别
默认为可重复读
修改事务隔离级别语句
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL 隔离级别;
隔离级别{ REPEATABLE READ
| READ COMMITTED
| READ UNCOMMITTED
| SERIALIZABLE }
MySQL数据库的事务隔离级别分为会话和全局两个范围
如果选择global,意思是此语句将应用于之后的所有session,而当前已经存在的session不受影响。
如果选择session,意思是此语句将应用于当前session内之后的所有事务。
如果什么都不写,意思是此语句将应用于当前session内的下一个还未开始的事务。
控制事务处理
MySQL使用下面语句标识事务的开始
START TRANSACTION;
使用ROLLBACK
ROLLBACK只能在一个事务处理内使用(在执行一条START TRANSACTION命令之后)
事务处理用来管理INSERT、UPDATE和DELETE语句。你不能回退SELECT语句。(这样做也没有什么意义。)你不能回退CREATE或DROP操作。事务处理块中可以使用这两条语句,但如果你执行回退,它们不会被撤销。
使用COMMIT
一般的MySQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交,即提交操作是自动进行的。
但是在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用commit语句。
这个例子中,从系统中完全删除订单20011.因为涉及更新两个数据库表,所以使用事务处理块来保证订单不被部分删除。最后的Commit语句仅在不出错时写出更改。如果第一条delete起作用,但第二条失败,则delete不会提交(实际上,它是被自动撤销的)
使用保留点
复杂的事务可能需要部分提交或回退,就需要设置保留点。这样,如果需要回退,可以回退到某个保留点SAVEPOINT
Savapoint 标识名;
每个保留点逗趣唯一标识的名字,以便在退回时知道回退到何处
Rollback to 标识名;
保留点在事务处理完成(执行一条rollback或commit)后自动释放。也可以用
RELEASE SAVEPOINT 标识名; 明确释放保留点
网友评论