mysql 表不支持事务处理 导致回滚失败解决方法

<?php

	$mysqli=new MySQLi("127.0.0.1","root","","enword");
	
	if($mysqli->connect_error){
			die($mysqli->connect_error);
		}
	
	$mysqli->autocommit(FALSE);
	$sql1="update accounts set balance=balance-2 where id=1";
	$sql2="update account set balance=balance+2 where id=2";
	
	$b1=$mysqli->query($sql1);
	$b2=$mysqli->query($sql2);
	
	
	
	if(!$b1||!$b2){	
		echo "失败".$mysqli->error;
		$mysqli->rollback();	
	}else{
		echo "成功";
		$mysqli->commit();
		}
	$mysqli->close();

?>

看过韩顺平视频的很多朋友都会遇到这个问题吧,明明视频里面运行是正常的,可自己运行这段代码时却发现数据不回滚,在搜索后找到了原因,记录如下。


MySQL数据库默认的存储引擎类型是MyISAM,这种存储引擎类型不支持事务处理。

在MySQL中,只有InnoDB存储引擎类型的数据表才能支持事务处理。

因此,如果想让MySQL支持事务处理,只要将数据表修改为InnoDB存储引擎类型即可。操作步骤如下:

1. 进入到phpMyAdmin主界面,在导航面板中选择要转换为InnoDB存储引擎类型的数据库,例如选择db_xuesheng数据库。如下图所示:



2. 在主界面顶端点击“SQL”超链接,打开“在数据库db_xuesheng运行SQL查询”窗口。如下图所示:




3. 在窗口中输入

show engines;
SQL命令。

4. 在窗口的右下角点击“执行”按钮,打开“显示查询框”页面。如下图所示:



5. 在“显示查询框”页面中,我们发现,InnoDB类型的Transactions项为YES,这说明InnoDB类型的数据库或数据表支持事务处理。

下面,我们只要将相关的数据表修改为InnoDB存储引擎类型,就能支持事务处理操作了。

6. 在phpMyAdmin的导航面板中选择要修改存储引擎类型的数据库db_xuesheng,然后在主界面顶端点击“SQL”超链接,打开“在数据库db_xuesheng运行SQL查询”窗口。如下图所示:



7. 在查询窗口中输入

ALTER TABLE tb_chengji ENGINE = InnoDB;
SQL命令。


8. 点击右下角的“执行”按钮,仍然打开“SQL”超链接窗口。如下图所示:



9. 至此,成功将数据表由MyISAM存储引擎类型转换为InnoDB存储引擎类型。

我们也可以在数据表中执行事务处理操作了!

评论

大侠名号:   验证码: 点击我更换图片  

修远兮

在这里记录每一点自己需要的知识

添加创始人微信,一起交流心得

推荐文章RECOMMEND