mysql事务知识分享

一、 什么是事务

事务就是一段sql 语句的批处理,但是这个批处理一个atom(原子) ,不可分割,要么都执行,要么回滚(rollback)都不执行。

二、为什么出现这种技术

为什么要使用事务这个技术呢? 现在的很多软件都是多用户,多程序,多线程的,对同一个表可能同时有很多人在用,为保持数据的一致性,所以提出了事务的概念。这样很抽象,举个例子: 

要划钱,的账户-1000元, 的账户就要+1000元,这两个update 语句必须作为一个整体来执行,不然扣钱了,没有加钱这种情况很难处理(找出原因)。

三、如何在MYSQL 中使用事务

1、谁可以使用

只有InnoDB /BDB 的之类的transaction_safe table 才能支持。

默认的engine MyISAM 是不支持事务的,show engine 可以看到支持的和默认的engine可以在[mysqld] 加入: default_storage_engine=InnoDB;  InnoDB 就是建立表的默认引擎

建立InnoDB Create table .... type=InnoDB Alter table table_name type=InnoDB;(如何查看已有表的类型: show create table table_name)

这样我们就可以在InnoDB 表上进行事务操作了!

2、如何使用

启动事务的方法:

认为分为两种:

1、begin rollback,commit .当然有的人用begin /begin work .推荐用START TRANSACTION SQL-99标准启动一个事务。

    start transaction

update from account set money=money-100 where name='a';

update from account set money=money+100 where name='b';

commit

解释: 这样start transaction 手动开启事务,commit 手动关闭事务。

2、默认的时候autocommit=1 自动提交是开启的,所以你可以理解为每条语句一输入到mysqlcommit 了。当你 set autocommit=0 时候,你可以这样:

update from account set money=money-100 where name='a';

update from account set money=money+100 where name='b';

commit

// 默认都不提交,只有手动键入commit 时候才上述都提交。


用户下订单并且支付了,这个是两张表,用户点击确认支付的时候你得操作这两张表(最起码,可能还有其他的),但是你操作订单表成功了,操作用户账户失败了,那么订单状态是已支付、用户的钱没扣到,你们就亏了。这时候如果采用事务,可以回滚,给用户提示支付失败,数据表没有任何改动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值