MySQL (3)

来源:互联网 发布:工程进度计划软件 编辑:程序博客网 时间:2024/06/14 07:37

事务处理

事务处理在各种管理系统中都有着广泛的应用,很多同步数据库操作大都需要用到事务处理。

比如说,银行转账,你既需要从一个账户把钱取出来,又需要把钱转到另一个账户。

如果没有事务处理,在你取钱的过程中,假如出错了,只执行了第一步,那后果难以想象。

但用事务处理,如果出错,你只要rollback就可以取消操作(只要你没有commit,就没有确实执行转账操作)。


功能实现原理:

在我们的InnoDB表中,我们执行的SQL语句,都要先存入日志文件,然后再讲执行结果提交到服务器,完成整个操作。

我们这里就是将开始由MySQL所掌握的自动提交功能,转变为由我们操作的提交功能,来完成一组SQL语句成功后才真实改变数据库的操作。

MySQL的事务处理主要有两种方法:

1、用START TRANSACTION,ROLLBACK,COMMIT来实现。

START  TRANSACTION:启动事务

COMMIT:成功后提交

ROLLBACK:回到事务启动前的状态

SAVEPOINT 点名;    设置标记,用于使用ROLLBACK TO 点名 ;  回滚到此点状态。

例:

mysql> START TRANSACTION;Query OK, 0 rows affected (0.00 sec)mysql> UPDATE bank SET money = money - 500 ;Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> UPDATE mymoney SET money = money + 500;Query OK, 0 rows affected (0.00 sec)Rows matched: 0  Changed: 0  Warnings: 0mysql> COMMIT;Query OK, 0 rows affected (0.00 sec)

在START TRANSACTION之后的两次修改数据都是先存入日志文件中,没有提交到服务器中,在COMMIT之后才将数据提交,

这样即使在修改数据的时候出错,我们也可以利用ROLLBACK来撤销之前的操作。


2、直接用SET来修改MySQL的自动提交模式。

MySQL默认是自动提交的,我们可以利用修改autocommit的值来修改MySQL的自动提交模式。

SET autocommit = 0;    禁止自动提交(要自己commit手动提交)

SET autocommit = 1;    开启自动提交

例:

mysql> SET autocommit = 0;Query OK, 0 rows affected (0.00 sec)mysql> UPDATE bank SET money = money - 500 ;Query OK, 1 row affected (0.00 sec)Rows matched: 1  Changed: 1  Warnings: 0mysql> UPDATE mymoney SET money = money + 500;Query OK, 0 rows affected (0.00 sec)Rows matched: 0  Changed: 0  Warnings: 0mysql> COMMIT;Query OK, 0 rows affected (0.00 sec)

修改为禁止自动提交时,我们修改完数据确认数据修改无误后,可以利用COMMIT来手动提交数据。当发现出错时也可以利用ROLLBACK来

回滚操作,撤销之前的操作。这种方法虽然也能够达到我们想要的效果,不过每次我们修改完数据之后,我们以后要修改数据都要受到提交,

直到把autocommit修改为1为止。但当我们用START TRANSACTION修改数据时,当我们提交数据之后,autocommit的值不会改变。




0 0
原创粉丝点击