Heim  >  Artikel  >  Datenbank  >  关于mysql事务处理

关于mysql事务处理

WBOY
WBOYOriginal
2016-06-07 17:40:28880Durchsuche

1.为什么需要使用事务?事务是单个的工作单元。如果某一事务成功,则在该事务中进行的所有数据修改均会提交,成为数据库中的永久组成部分。如果事务遇到错误且必


1.为什么需要使用来实现

    begin开始一个事务

    rollback事务回滚

来改变mysql的自动提交模式

    mysql默认是自动提交的,香港虚拟主机,也就是你提交一个query,就直接执行!可以通过

    set autocommit = 0 禁止自动提交

    set autocommit = 1 开启自动提交

BDB类型的数据表才支持事务处理,其他的类型是不支持的! 事务都应该具备ACID特征。所谓ACIDAtomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字母所写 原子性:组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。换句话说,事务是不可分割的最小单元。比如:银行转帐过程中,必须同时从一个帐户减去转帐金额,并加到另一个帐户中,只改变一个帐户是不合理的。

一致性:在事务处理执行前后,数据库是一致的。也就是说,事务应该正确的转换系统状态。比如:银行转帐过程中,虚拟主机,要么转帐金额从一个帐户转入另一个帐户,要么两个帐户都不变,没有其他的情况。

隔离性:一个事务处理对另一个事务处理没有影响。就是说任何事务都不可能看到一个处在不完整状态下的事务。比如说,网站空间,银行转帐过程中,在转帐事务没有提交之前,另一个转帐事务只能处于等待状态。

持续性:事务处理的效果能够被永久保存下来。反过来说,事务应当能够承受所有的失败,包括服务器、进程、通信以及媒体失败等等。比如:银行转帐过程中,转帐后帐户的状态要能被保存下来。


4.事务的简单的实例

$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技术之路” 博客,请务必保留此出处

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn