php myisam,php+mysql怎么实现事务回滚,表是MyISAM类型的?

MyISAM不支持事务,但如果遇到数据库错误,怎么实现回滚?例如:

一段程序要先插入a表,然后再插入b表。 逻辑如下行不行:

aResut=doInsertA

if(aResut){

bResult=doInsertB

if (!bResult){

delete aResult from a

}

}

改成innodb

binlog

你好,你说的没错

MyISAM

不支持回滚。但是有几种提前预防数据丢失的措施:如下

要么存储引擎改成

InnoDB

;

要么把每次执行的

SQL

语句保存起来;

要么常备份

楼上说了

binlog

我也很好奇是什么鬼,我上面的回答狭隘了。于是找到了这个东西: mysqlbinlog+MyISAM实现mysql随时随地恢复的方法

myisam不支持事务,改为innodb吧

还有binlog是可以恢复数据的,但是不能实时恢复

表用innodb吧。

然后定义一个异常,如,表不存在

begin

declare flag varchar(32);

— 定义异常

declare exit handler for 1146

begin

rollback ;

...

end

set autocommit = 0 ; — 开启事务

aResut=doInsertA

if(aResut){

bResult=doInsertB

if (!bResult){

-- 触发异常回滚

insert into abcdefghijklmn(a)values('a');

}

}

— 提交

commit ;

没有办法,myisam是不支持事务的,换成innodb吧

如果非需要用myisam,可以这样用 先插入临时表中,如果执行成功用

insert tableA from select id name from tableb

.这样模拟事物。可以封装为存储过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值