您的位置:首页 > 数据库 > MySQL

MySQL学习笔记之事务

2014-11-24 10:46 519 查看
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):当事务成功,数据将提交到数据库,数据就被持久化了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: