SQL事务

 事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并恢复到处里前的状态。
功能实现原理:
在我们的InnoDB表中,我们执行的SQL语句,都要先存入日志文件,然后再讲执行结果提交到服务器,完成整个操作。
我们这里就是将开始由MySQL所掌握的自动提交功能,转变为由我们操作的提交功能,来完成一组SQL语句成功后,才真实改变数据库的操作。




功能需求:
1.这两个步骤中任何一个步骤失败了,我们都应该回到操作前的初始状态。
2.这两个步骤都成功了,就算成功操作,数据库中应该变化。


BeginTrans用于开始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的事务处理结果,即确认事务的处理。


  功能实现的语法:
1.SET @@autocommit = 0; (1,为自动提交;0,为手动提交)
  举例:mysql> set @@autocommit=1;

Query OK, 0 rows affected (0.00 sec)

mysql> update bank set money=100;

Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select * from bank;
+-------+
| money |
+-------+
|   100 |
+-------+

说明:当autocommit=0时,如果对表进行提交后,然后再对这表进行查看,表中的数据会发生变化。当autocommit=1时,进行上述操作后,对表进行查询,数据不会发生改变,执行commit命令后,再对表进行查询,数据会发生变化。


2.START TRANSACTION ;启动事务
 COMMIT;成功后提交
 ROLLBACK;回到事务启动前的状态。
 SAVEPOINT  点名;设置标记,用于使用ROLLBACK  TO 点名 回滚到此点状态。


  ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。




原子性


整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。


一致性


在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。


隔离性


两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据。


持久性


在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。


由于一项操作通常会包含许多子操作,而这些子操作可能会因为硬件的损坏或其他因素产生问题,要正确实现ACID并不容易。ACID建议数据库将所有需要更新 以及修改的资料一次操作完毕,但实际上并不可行。


目前主要有两种方式实现ACID:第一种是Write ahead logging,也就是日志式的方式。第二种是Shadow paging。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值