纵有疾风起
人生不言弃

mysql之事务介绍

MySQL事务

事务处理机制在程序开发过程中有着非常重要的作用,它可以使整个系统更加安全,例如在银行处理转账业务时,如果A账户中的金额刚被发出,而B账户还没来得及接收就发生停电,这会给银行和个人带来很大的经济损失。采用事务处理机制,一旦在转账过程中发生意外,则程序将回滚,不做任何处理。

实例265:使用事务处理技术实现关联表间信息的删除

实例说明

MySQL数据库中的表可以通过主键相互关联,例如学生成绩管理系统中,学生表和成绩表可以通过id实现关联,所以在删除某个学生信息时,只需删除这两个表中为该id的所有记录。但是,当对成绩表实现删除相关id工作后,还没来得及删除学生信息表中该学生的信息时就发生停电等意外,则再重新查找该学生的成绩时,是无法查找到该学生成绩的。

本实例将采用事务处理方式,对学生信息表和学生成绩表中的数据进行删除,运行本实例,学生信息及学生成绩信息分别如图9.18及图9.19所示。当删除图9.18中的学生信息后,查看学生成绩信息可以发现与该学生对应的成绩全部删除。

图9.19 查看学生信息
图9.18 查看学生成绩

技术要点

实现事务的处理可以通过PHP预定义类mysqli的以下方法实现。
autocommit(boolean):该方法用于限定查询结果是否自动提交,如果该方法的参数为true则自动提交,如果参数为false则关闭自动提交。MySQL数据库默认为自动提交。
rollback():利用mysqli类中的该方法可以实现事务的回滚。
commit():利用该方法可以实现提交所有查询。

实现过程

(1)建立数据库及数据表,并实现与数据库的连接。实现与数据库建立连接的代码如下:

<?php include_once("conn.php"); $sql=$conn->query("select * from tb_stu"); $info=$sql->fetch_array(MYSQLI_ASSOC); if($info==NULL) { echo "暂无学生信息!"; } else { do { ?> <tr> <td height="25" bgcolor="#FFFFFF"><div align="center">
<?php echo $info[sname];?></div></td> <td height="25" bgcolor="#FFFFFF"><div align="center">
<?php echo $info[sno];?></div></td> <td height="25" bgcolor="#FFFFFF"><div align="center">
<?php echo $info[sage];?></div></td> <td height="25" bgcolor="#FFFFFF"><div align="center">
<?php echo $info[saddress];?></div></td> <td height="25" bgcolor="#FFFFFF"><div align="center">
<?php echo $info[ssfzh];?></div></td> <td bgcolor="#FFFFFF"><div align="center">
<a href="javascript:if(window.confirm('确定删除该学生信息么?')==true)
{window.location.href='delete.php?id=<?php echo $info[id];?>';}">删除</a></div></td> </tr> <?php } while($info=$sql->fetch_array(MYSQLI_ASSOC)); } ?>

(2)显示所有学生基本信息。代码如下: 
在实现该模块功能时,可以利用JavaScript实现该页与delete.php页面的信息传递。代码如下:

<a href="javascript:if(window.confirm('确定删除该学生信息么?')==true) {window.location.href='delete.php?id=<?php echo $info[id];?>';}">删除</a>

window对象的confirm()方法用于弹出一个对话框,用于提示用户是否真正删除某学生的所有信息。
(3)利用事务处理机制对学生基本信息进行删除。代码如下:

<?php $id=$_GET[id]; include_once("conn.php"); $conn->autocommit(false); if(!$conn->query("delete from tb_sco where id='".$id."'")) { $conn->rollback(); } if(!$conn->query("delete from tb_stu where id='".$id."'")) { $conn->rollback(); } $conn->commit(); $conn->autocommit(true); echo "<script>window.location.href='index.php';</script>"; ?>

举一反三

根据本实例,读者可以:
实现学生信息的批量删除。
实现银行的转账处理。

实例262:使用事务处理技术实现银行的安全转账

实例说明

在实现银行转账过程中,发生意外是在所难免的,为了避免因意外而造成不必要的损失,在银行转账时经常使用事务处理方式。运行本实例,如图9.20所示,在图中的文本框中输入要转给B账户的金额后,单击“转

未经允许不得转载:起风网 » mysql之事务介绍
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录