MySQL的事务
推荐一本书:《MySQL技术内幕:InnoDB存储引擎》
关于事务的概念和四个特性,看这篇教程吧:http://www.runoob.com/mysql/mysql-transaction.html
上面给出的链接中关于事务的实际使用说的不够清楚,下面开始详细说明:
一、开启事务处理的办法(两种)
1.临时显示地开启一次事务,commit(提交)或者rollback(回滚)后事务结束
setcuto
begin; # 开启事务 ,也可以用 start transaction;来开启事务,它和begin是等价的。
rollback; # 回滚,同义:rollback work;
commit; # 提交,同义:commit work;
插句话:博客园平台的代码框是真的不好看,格式有时候会乱,表格也是如此,因此今后的代码都直接在文章里写,并将代码的颜色设置为蓝色。
2.开启MySQL的事务模式,今后的每一次操作都是事务,也就说commit或者rollback之后,MySQL又自动开启了下一个事务
set autocommit = 0; # 禁止自动提交,开启事务模式
set autocommit = 1; # 开启自动提交,关闭事务模式
在执行SQL语句之后,再查询表,发现表中的数据已经更新成功了,但实际上数据库中的数据并没有真正地改变。只有commit后数据库中的数据才会真的改变。
更新:事务提交之前,数据保存在内存中,提交后保存在磁盘。
3.为事务添加保存点,保存点也就是一个状态
savepoint one; # 设置名称叫one的保存点
release savapoint one; # 删除名字叫one的保存点
rollback to one; # 回到名字叫one的保存点,注意回滚到某个保存点后当前事务并没有结束
4.还有一个非常重要的语句:set transaction # 设置隔离级别,这一部分等学完锁再回来补充。
实例1:开启事务-查询表(name=tom)-更新表(set name=hey)-查询表(name=hey)-回滚-查询表(name=tom)
实例2:开启事务-设置初始状态为保存点-插入数据-设置插入后的状态为一个保存点-回滚到第一个保存点