关于mysql事务处理
2012-08-28 09:48
375 查看
1.为什么需要使用事务?
事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,
成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。
事务使用,可以提供一个机制,防止在执行过程中出错而之前正确的sql有影响了数据库的情况出现;
事务处理机制在程序开发过程中有着非常重要的作用,它可以使整个系统更加安全,
例如在银行处 理转账业务时,如果A账户中的金额刚被发出,而B账户还没来得及接收就发生停电,
这会给银行和个人带来很大的经济损失。采用事务处理机制,一旦在转账过程 中发生意外,则
程序将回滚,不做任何处理。
2.MYSQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit 事务确认
2.直接用set来改变mysql的自动提交模式
mysql默认是自动提交的,也就是你提交一个query,就直接执行!可以通过
set autocommit = 0 禁止自动提交
set autocommit = 1 开启自动提交
来实现事务的处理。
提示:但要注意当用set autocommit = 0 的时候,你以后所有的sql都将作为事务处理,直到你用commit确认或 rollback结束,注意当你结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务!
3.mysql支持事务存储引擎的选择
MYSQL只有 INNODB和BDB类型的数据表才支持事务处理,其他的类型是不支持的! 事务都应该具备ACID特征。所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写
原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。
一致性:在事务处理执行前后,数据库是一致的。也就是说,事务应该正确的转换系统状态。比如:银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。
隔离性:一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。比如说,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。
持续性:事务处理的效果能够被永久保存下来。反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。
4.事务的简单的实例
<?php
$db = mysql_connect('localhost','root','') or die('链接失败');//链接数据库
mysql_select_db('test');//选择数据库
mysql_query("set autocommit = 0");//设置mysql不自动提交
mysql_query("begin");//设置事务的开始
//插入数据
$sql = "INSERT INTO `order` (`order_num`) VALUES ('1sadfsdfafasdfasdffffffffsd1111111')";
$sql2 = 'INSERT INTO `order` (`order_num`) VALUES ("1sadfsdfafasdfasdffffffffsd1111111")';
$q = mysql_query($sql);
$q2 = mysql_query($sql2);
if(!$q && !q2){
mysql_query("rollback");//执行回滚
echo '执行失败,数据回滚';exit;
}
mysql_query("COMMIT");//提交事务
echo "成功";
mysql_close($db);
本文出自 “烛光照亮天堂-IT技术之路” 博客,请务必保留此出处http://wuhai.blog.51cto.com/2023916/974994
事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,
成为数据库中的永久组成部分。如果事务遇到错误且必须取消或回滚,则所有数据修改均被清除。
事务使用,可以提供一个机制,防止在执行过程中出错而之前正确的sql有影响了数据库的情况出现;
事务处理机制在程序开发过程中有着非常重要的作用,它可以使整个系统更加安全,
例如在银行处 理转账业务时,如果A账户中的金额刚被发出,而B账户还没来得及接收就发生停电,
这会给银行和个人带来很大的经济损失。采用事务处理机制,一旦在转账过程 中发生意外,则
程序将回滚,不做任何处理。
2.MYSQL的事务处理主要有两种方法
1.用begin,rollback,commit来实现
begin开始一个事务
rollback事务回滚
commit 事务确认
2.直接用set来改变mysql的自动提交模式
mysql默认是自动提交的,也就是你提交一个query,就直接执行!可以通过
set autocommit = 0 禁止自动提交
set autocommit = 1 开启自动提交
来实现事务的处理。
提示:但要注意当用set autocommit = 0 的时候,你以后所有的sql都将作为事务处理,直到你用commit确认或 rollback结束,注意当你结束这个事务的同时也开启了新的事务!按第一种方法只将当前的做为一个事务!
3.mysql支持事务存储引擎的选择
MYSQL只有 INNODB和BDB类型的数据表才支持事务处理,其他的类型是不支持的! 事务都应该具备ACID特征。所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写
原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。
一致性:在事务处理执行前后,数据库是一致的。也就是说,事务应该正确的转换系统状态。比如:银行转帐过程中,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。
隔离性:一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。比如说,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。
持续性:事务处理的效果能够被永久保存下来。反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。
4.事务的简单的实例
<?php
$db = mysql_connect('localhost','root','') or die('链接失败');//链接数据库
mysql_select_db('test');//选择数据库
mysql_query("set autocommit = 0");//设置mysql不自动提交
mysql_query("begin");//设置事务的开始
//插入数据
$sql = "INSERT INTO `order` (`order_num`) VALUES ('1sadfsdfafasdfasdffffffffsd1111111')";
$sql2 = 'INSERT INTO `order` (`order_num`) VALUES ("1sadfsdfafasdfasdffffffffsd1111111")';
$q = mysql_query($sql);
$q2 = mysql_query($sql2);
if(!$q && !q2){
mysql_query("rollback");//执行回滚
echo '执行失败,数据回滚';exit;
}
mysql_query("COMMIT");//提交事务
echo "成功";
mysql_close($db);
本文出自 “烛光照亮天堂-IT技术之路” 博客,请务必保留此出处http://wuhai.blog.51cto.com/2023916/974994
相关文章推荐
- 关于MySQL的事务处理及隔离级别
- 关于MySQL的事务处理及隔离级别
- AAA关于MySQL的事务处理及隔离级别
- 关于MySQL的事务处理及隔离…
- 关于mysql事务处理
- 关于MySQL的事务处理及隔离级别
- 关于mysql管理事务处理
- 关于MySQL的事务处理及隔离级别
- mysql 5.5和5.6版本关于timestamp插null和0的处理
- mysql事务处理
- mysql 存储过程 事务处理
- php mysql 事务处理
- 关于mysql的事务的控制实验
- MySQL事务处理
- MySQL:关于mysql插入int空值的处理
- 关于Oracle处理DDL和DML语句的事务管理
- mysql的事务处理
- mysql java 处理事务问题
- MYSQL--事务处理
- 关于SQLserver2005事务和异常处理的联合处理以及在c#中的异常捕获