mysql 事务

 mysql 事务    

      在有些情况下,我们的sql语句是单一执行的,就是每条sql 语句的成功失败相互没有关联,但是有些sql 语句的执行是相关的,不如一个商城站,用户够买一个商品,那么购物车就应该添加一个条记录,而商品库存就要减少,这两条sql 语句必须同时成功才行,如果购物车有新的记录,而商品库存减少的sql 语句出错了,那么数据库的数据就出现问题的,那么可以把 这两个语句看成功一个事务,两条语句同时成功,则执行,如果有一条语句不成功则不执行。

 

事务的原理:

在运行一组 sql 语句之前设计一个记号备份点。

如果sql 语句组执行成功则提交操作。

如果执行失败则返回备份点。

 

 

 利用 innodb 存储引擎的事务日子功能!

Innodb 在运行sql 语句是 首先是运行事务日志 如果sql 语句没有问题则自动提交给数据库。 我们要将自动提交功能关闭,如果sql语句组都没有问题则一起提交。

如果成功提交到数据库内,一旦提交数据库就表示更改了数据库!

Sql 语句执行分成两个阶段

1. 执行阶段(事务日志中)

2. 将执行的结果,提交到数据库的阶段!

我们的事务日志  就是保存执行阶段的结果!

如果用于选择提交,则才将执行结果提交到数据库!

默认的执行方式 为 自动提交方式,执行完毕后自动提交。

因此需要关闭自动提交功能!

 

修改自动提交

存在一个系统的变量,

autocommit  可以对自动提交进行配置      

 

Set autocommit=1;  表示开启自动提交

 

Set  autocommit=0; 表示关闭自动提交

 

关闭自动提交后,再次执行sql 语句后 ,发现在其他的连接中没有发生变化,因为结果没有被提交!

在这个基础上执行所有的sql语句。

判断是否都成功(出现的错误 包括 语法错误,和逻辑错误 服务器错误)。

成功:将结果提交 利用  commit

 

失败:回到 开始的位置 利用 rollback

 

 

常用的事务指令:

Start  transaction;  开启事务 

 也可以使用 start begin;

特点是事务结束了都会自动回到 start  状态如果 start 时是关的则回到关闭状态如果是开启状态则会到开启状态。

 

Commit; 提交         rollback;失败 

 

事务功能只在innodb 和DBD 存储引擎下生效;

Innodb 的并发性高于,DBD 因为innodb是行锁,DBD 为表锁。

 

事务的特性:  

1.原子性。  事务中的多条语句不能分开成功都成功 一条失败则都失败。

2.一致性。  在使用事务时到事务结束时数据不能改变锁行。

3.隔离性。 如果同时有两个事务两个事务是没有影响的。

4.持久性。  事务提交后修改的数据不能回滚的事务前。

posted @ 2014-07-30 10:56  奋进程序猿  阅读(501)  评论(1编辑  收藏  举报