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的值不会改变。
- MySQL (3)
- mysql使用(3)
- Mysql数据库(3)
- MySQL数据库(3)
- MySQL(3)
- MySQL(3)-MySQL Workbench
- mysql总结3(高性能MySQL笔记)
- mysql dba系统学习(3)mysql的启动停止
- 一步一步学MySQL---18 MySQL常用函数(3)
- 快速上手MySql && MySql GUI工具 SQLyog Community (3)
- mysql(3):mysql与java的连接使用
- mysql字符集归类(3)
- mysql学习笔记(3)
- mysql优化篇(3)
- MySQL Python教程(3)
- mysql学习笔记(3)
- MySQL操作笔记(3)
- mysql基础教程(3)---游标
- 基于MKNetworkKit的断点续传
- cluster进程间通讯精简版
- Java中WebService实例
- el表达式
- Java数据类型
- MySQL (3)
- 冒泡排序
- 网络连接若干问题
- Hive与HBase联合操作异常
- Android触摸事件分发机制
- 数据库之Sqlite3
- js对mouseover和mouseout事件处理
- Hibernate的注释该如何使用? 属性 数据库中 字段 实体 级联删除
- Android eclipse的Toggle Block Selection Mode功能