事务的使用场景案例(事务的操作顺序)

lxf2023-05-08 06:04:01

PHP操作mysql事务实例,MySQL事务实例
本文介绍了PHP操作MySQL事务的方法,分享给大家,供大家参考。具体方法如下:

一般来说,交易应该具有酸的特征。所谓酸,就是用四个字的首字母写的:原子、一致、孤立、持久。让我们以“银行转账”为例分别解释它们的含义:

原子性:组成事务的语句形成一个逻辑单元,只有一部分不能执行。换句话说,事务是不可分割的最小单位。例如,在银行转账的过程中,必须从一个账户中减去转账金额,同时添加到另一个账户中。只改一个账户是不合理的。
②一致性:事务执行前后数据库一致。换句话说,事务应该正确地转换系统状态。比如银行转账过程中,要么转账金额从一个账户转到另一个账户,要么两个账户都不变,没有其他情况。
③隔离:一个事务对另一个事务没有影响。也就是说,任何交易都不可能看到一个交易处于不完整的状态。例如,在银行转账的过程中,在转账交易提交之前,另一笔转账交易只能处于等待状态。
④持久性:交易的效果可以永久保存。相反,事务应该能够承受所有故障,包括服务器、流程、通信和介质故障。比如银行转账过程中,要保留转账后的账户状态。

在PHP中,mysql很好的封装了MySQL事务的相关操作。下面的例子:
复制代码如下:

$ SQL 1 = " update User set score count = score count+10 where ID = ' 123456 ' ";
$ SQL 2 = " update score detail set fs core = 300 where ID = ' 123456 ' ";
$ SQL 3 = " insert into Score detail ID,Score) values ('123456 ',60)";
$ mysqli = new mysqli(' localhost ',' root ','',' DB _ lib 2 test ');
$ mysqli-> auto commit(false);//Start things
$ mysqli-> query($ SQL 1);
$ mysqli-> query($ SQL 2);
if(!$ mysqli-> errno){
$ mysqli-> commit();
echo ' ok ';
} else {
echo ' err ';
$ mysqli-> roll back();
}


在这里,我们再使用 php mysql 系列函数执行事务。

复制代码代码如下:

$ SQL 1 = " update User set score count = score count+10 where ID = ' 123456 ' ";
$ SQL 2 = " update score detail set fs core = 300 where ID = ' 123456 ' ";
$ SQL 3 = " insert into Score detail ID,Score) values ('123456 ',60)";
$ conn = MySQL _ connect(' localhost ',' root ',' ');
MySQL _ select _ DB(' DB _ lib 2 test ');
MySQL _ query(' start transaction ');
//MySQL _ query(' SET auto commit = 0 ');
MySQL _ query($ SQL 1);
MySQL _ query($ SQL 2);
if(MySQL _ errno()){
MySQL _ query(' roll back ');
echo ' err ';
} else {
MySQL _ query(' commit ');
echo ' ok ';
}
//MySQL _ query(' SET auto commit = 1 ');
//MySQL _ query($ SQL 3);

请注意:

不支持MyISAM: transaction,用于只读程序提高性能
InnoDB:支持ACID事务、行级锁和并发
Berkeley DB:支持事务。

希望这篇文章对你的PHP+MySQL数据库编程有所帮助。


谁给一个php操作mysql类,有详细的说明或者例子?

下面这个,是针对php5的一个简单数据库封装类,适合学习,其他的如删除、更新等操作,你可以自己加上: