一、如果想使用事物处理机制必须在见表时使用InnoDB ENGINE
在见表的时候要加上ENGINE=InnoDB
例如:
create table account(
id int primary key,
balance float
) ENGINE=InnoDB DEFAULT CHARSET=UTF8insert into account values (1,34);
insert into account values (2,20);
二、但,你的mysql服务器必须要支持InnoDB 引擎,默认是不支持的。只有默认的MyISAM引擎,安装InnoDB 引擎方法:
首先看一下MySQL安装了什么引擎 这里我们可以看到只有MyISAM引擎。 接下来进行安装: 安装完毕。 到这里就可以继续安装Mediawiki了,在数据库设置的界面就可以选择数据库引擎了。 如果你需要设置成默认引擎,请继续往下看: 首先查看一下引擎: 数据库引擎里已经有InnoDB了。 输入上面的命令就可以设置InnoDB为默认的数据库引擎了。 三、事务处理 简单案例一: <?php //★将提交设置为false $sql1="update account set balance=balance-2 where id=1"; if(!$b1||!$b2){ }解决方法:
设置默认数据库引擎
//把账户1的2元钱转账到账号2上
$mysqli=new MySQLi("127.0.0.1","root","zkeys","sqlphp");
if($mysqli->connent_error){
die($mysqli->connent_error);
}
$mysqli->autocommit(false);
$sql2="update account set balance=balance+2 where id=2";
$b1=$mysqli->query($sql1);
$b2=$mysqli->query($sql2);
echo "失败".$mysqli->error;
//★失败则回滚
$mysqli->rollback();
}else{
echo "成功";
//★成功则提交
$mysqli->commit();
$mysqli->close();
?>
四、事务处理 简单案例二:
<?php
/*======================================事务处理======================================*/
//建表时要使用InnoDB(type=InnoDB)
$mysqli=new MySQLi("localhost","root","","xiaoqiangdb");
//$mysqli->set_charset("utf8"); //设置字符集
$mysqli->autocommit(0); //关闭自动提交
$error=true;
$price=50;
$sql="UPDATE zhanghaodb set yue=yue-{$price} where name='zhangsan'";
$result=$mysqli->query($sql);
if(!$result){
$error=false;
echo "从张三转出失败<br>";
}else{
if($mysqli->affected_rows==0){
$error=false;
echo "张三的钱没有变化";
}else{
echo "张三的钱转出成功<br>";
}
}
$sql="UPDATE zhanghaodb set yue=yue+{$price} where name='lisi'";
$result=$mysqli->query($sql);
if(!$result){
$error=false;
echo "从李四转入失败<br>";
}else{
if($mysqli->affected_rows==0){
$error=false;
echo "李四的钱没有变化";
}else{
echo "李四的钱转入成功<br>";
}
}
if($error){
echo "转账成功!";
}else{
echo "转账失败!";
$mysqli->rollback(); //回滚
}
$mysqli->autocommit(1); //开启自动提交
$mysqli->close();
?>
评论回复