1、什么时候会用到
我们用一个简单的例子来说明:
当我们银行转账的时候,首先我们要从自己银行把钱取出来,然后存入对方银行。
这里有两个动作:
1、从自己银行里面把钱取出来(update)
2、存入对方银行(update)
如果第一个动作执行成功,但是第二条数据执行失败,那么我们自己的钱取出来,但是对方却没有收到,我们就损失钱财了。
现在我们的期望是:当1、2动作中任意一个执行失败,拿就回滚到执行SQL语句前的状态。执行成功就写入数据库。
但现在提交到数据库的动作是由系统自动完成,所以我们现在就需要来接管这个自动提交的功能。
2、关键字
autocommit(控制是否自动提交到服务器,1,为自动提交;0,为手动提交,系统默认1)
commit(提交)
rollback(回滚到事务执行前)
savepoint 标记点名称(设置标记,用来rollback到这个标记点)
2、实现语法
1.set@@autocommit = 0;
update 表名 set 字段名=新值 where 条件;
comit;(执行成功后提交)/rollback;(执行失败回滚)
缺点:因为我们更改了autocommit 的值,那么以后的操作都是手动提交,这样不利于操作,所以我们需要使用下面的方法。
2.start transaction;启动事务
update 表名 set 字段名=新值 where 条件;
commit;(执行成功后提交)/rollback;(执行失败回滚)
savepoint 标记点名称;(设置标记),用于使用rollback to标记点名称(回滚到此点状态)
3、特性:ACID
1.原子性(A):事务其实就是执行一组SQL语句,他们中只要有一条语句执行失败,整个事务都失败。
2.一致性(C):即在事务开始之前和事务结束以后,数据库的设定是一样的。
3.隔离性(I):当使用事务对数据进行操作时,我们另外的会话是无法对此条数据进行操作的。我们的InnoDB使用的是数据行锁。
4.持久性(D):当事务成功,数据将提交到数据库,数据就被持久化了。