学习了SQL语句的批量执行后,就提出了事务的相关概念.事务是什么呢?
事务:mysql事务处理mysql事务处理的意义事务处理机制在程序开发过程中有着非常重要的作用,它可以使整个系统更加安全,例如在银行处理转账业务时,如果A账户中的金额刚被发出,而B账 户还没来得及接收就发生停电,这会给银行和个人带来很大的经济损失。采用事务处理机制,一旦在转账过程中发生意外,则程序将回滚,不做任何处理。
事务的特性(ACID特性)
A:原子性(Atomicity): 事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
C:一致性(Consistency):事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
I:隔离性(Isolation): 一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability):一个事务一旦提交,它对数据库中数据的改变就应该是永久性的
start transaction #开启事务
sql语句1;
sql语句2;
.
.
rollback;#回滚,将撤销数据
#或者
commit;#提交数据,数据无法再恢复
同样的可以使用php调用MySQL数据库中使用事务:
<?php
@$conn=new mysqli("localhost","root");
if($conn->connect_error) die("数据库连接失败".$conn->connect_error());
$conn->select_db("php");
$query1="update score set score=score-10 where id=1";
$query2="update score set score=score+10 where id=2";
$conn->autocommit(false);//取消自动提交
$result1=$conn->query($query1);
$result2=$conn->query($query2);
if(!$result1||!$result2)
{
echo "修改失败";
$conn->rollback();
}
else
{
echo "修改成功";
$conn->commit();
}
?>
如果$query1或者$query2其中的一个执行错误,数据都不会被提交而是回滚,如果不使用事务的话,其中一个发生错误而另一个会继续执行的情况.体现了事务的原子性(好奇怪的称呼,是原子无法再分割的意思么(ーー;))
但我发现一个问题:如果我修改的数据不存在,不是指表不存在,同样也会返回一个值(书上说是结果对象),这样从而修改成功了.如何解决这个问题呢?我还没解决..╮(╯_╰)╭太弱了....