mysql 事务处理

只有  innodb 、BDB引擎支持事务 
    如果在执行mysql事务中 一次执行多条sql语句  其中有一条sql语句的表引擎并不支持事务操作  那么 事务约束将对这条sql语句无效 换句话说 就是 事务执行完成 不管是 rollback  还是  commit  这条语句都不能回滚或者提交 而是在执行这条语句的时候 这张表就发生改变了

你可以在同一个语句中合并事务安全和非事务安全表来获得两者最好的情况。尽管如此,在autocommit被禁止掉的事务里,变换到非事务安全表依旧即时提交,并且不会被回滚。

什么是事务
    一组sql语句操作单元
    组内所有sql语句完成一个业务
    如果整组成功 意味着全部sql都实现
    如果其中任何一个失败 意味着整个操作都失败
    失败 意味着整个过程都没意义 数据库回到操作前的初始状态
   符合以上特性的 就是事务

事务的特点
    1.原子性    atomicity
    2.一致性    consistency
    3.隔离性    isolation
    4.持久性    durability
    ACID 属性

如果处理
    失败后 可以回到原来的位置
    没成功之前 别的用户 (进程 会话) 是不能看到操作内的数据修改的

思路
    就是在一组操作之间设置一个记号  备份点
    每当执行一次的时候 就会保存在一个事物日志里面 
    如果成功就将结果提交到数据库内 意味着改变了数据库内容
    所以sql执行分成2个阶段
    1.执行阶段
    2.将执行结果提交到数据库
    其中我们的事务日志,就是保存执行阶段的结果
    如果用户选择提交 才将执行结果提交到数据库


实现
    我们思考下 默认的sql执行方式 自动提交 执行sql完毕 自动完成提交工作
    所以 要先关闭 mysql的自动提交
    存在一个系统变量  autocommit  可以对自动提交进行配置 查看这个变量 show variables like 'autocommit';
    关闭自动提交  set  autocommit = 0;

    再此基础上执行完所有的sql语句
    判断是否都成功 (出现错误 包括语法错误 和逻辑错误  服务器错误)
    成功  commit;    这个语句就1个单词
    失败 rollback;    这个语句就一个单词
    
    但是  直接设置 autocommit 很麻烦 
    所以常见的使用方法是 start transaction;
    成功  commit  
    失败 collback 
    这个有个特点 就是事务接触了  不管是commit 或者是collback  都会把autocommit回到原来的状态





demo:
create table a (
    id int primary key auto_increment,
    a_money decimal(10,2)  comment '班费'
);

insert into a  values(null,1250);

create table b (
    id int primary key auto_increment,
    b_money decimal(10,2) comment '生活费'
);
insert into b values(null,5000);

start transaction;
update t2 set b_money=b_money-30 where id = 1;
commit  ||  collback;




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值