大家好,这里是立志于在有生之年看到并参与通用人工智能开发工作的Nobody,由于最近在公司要经常性地接触大数据工具,所以打算开一个大专栏对大数据工具进行学习总结整理。
以下为该部分的前置博客
大数据闯关之MySQL基础篇(八):多表查询
大数据闯关之MySQL基础篇(七):约束
大数据闯关之MySQL基础篇(六):函数
大数据闯关之MySQL基础篇(五):DCL用户管理
大数据闯关之MySQL基础篇(四):DQL数据查询操作
大数据闯关之MySQL基础篇(三):DML数据操作
大数据闯关之MySQL基础篇(二):数据库操作
大数据闯关之MySQL基础篇(一):MySQL安装及基础介绍
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
默认的,MySQL的事务是自动提交的,也就是说,当执行一条DML语句,MySQL会立即隐式地提交事务
create table account(
id int auto_increment primary key comment '主键ID',
name varchar(10) comment '姓名',
money int comment '余额'
) comment '账户表';
insert into account(id, name, money) VALUES (null,'张三',2000),(null,'李四',2000);
首先有一个转账操作,有以下几个步骤:查询张三账户余额、将张三账户余额-1000,将李四余额+1000
select * from account where name = '张三'; -- 1. 查询张三账户余额
update account set money = money - 1000 where name = '张三'; -- 2. 将张三账户余额-1000
update account set money = money + 1000 where name = '李四'; -- 3. 将李四账户余额+1000
这样就完成了张三向李四转账1000元的操作
-- 转账操作 (张三给李四转账1000)
-- 1. 查询张三账户余额
select * from account where name = '张三';
-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';
程序异常
-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';
会发现有一句: 程序异常,这句话并非sql语句或者注释,那么程序就会报错,以至于张三的钱会扣1000,而李四的钱不会变多,因此这1000块就不翼而飞了。因此我们要将这个转账操作写在一个事务里面。有以下两种方式可以控制事务
SELECT @@autocommit;
SET @@autocommit-0;
commit;
rollback;
-- 转账操作 (张三给李四转账1000)
start transaction ; -- 开启事务
-- 1. 查询张三账户余额
select * from account where name = '张三';
-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';
程序执行报错 ...
-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';
-- 提交事务
commit;
-- 回滚事务
rollback;
可以看到,这个程序一定会出错,那么我们就不需要commit了,只需要rollback即可。
三、事务四大特性ACID
当A事务和B事务同时操作同一个表时会引发以下三个问题
事务隔离级别的设置就是为了解决以上的并发事务问题的
隔离级别 | 脏读 | 不可重复读 | 幻读 |
Read uncommitted | √ | √ | √ |
Read committed | × | √ | √ |
Repeatable Read(默认) | × | × | √ |
Serializable | × | × | × |
--查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
--设置事务隔离级别
SET [SESSION|GLOBAL] TAANSACTION ISOLATION LEVEL {Read uncommitted|Read committed|Repeatable Read|Serializable};
基础篇到这里就结束了,下一篇章将进军Hadoop!
阅读量:1010
点赞量:0
收藏量:0