mysql -- 事务

Posted ivyharding_wang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql -- 事务相关的知识,希望对你有一定的参考价值。

#TCL语言
/*
transaction control language事务控制语言
事务:
一个或者一组SQL语句组成一个执行单元,这个执行单元要么全部执行,要么全部不执行
案例:转账,张三丰向郭襄转账500
张三丰   1000
郭襄     1000

update 表 set 张三丰的余额=500 where name="张三丰"
再上面执行完之后,数据库挂了,咋解决:这里面涉及事物机制
update 表 set 郭襄的余额=1500 where name="郭襄"

整个单独单元作为一个不可分割的获赠提,如果单元中某条sql语句一旦执行失败或者产合适呢个错误,
整个单元将会回滚(撤销之前的所有操作)。所有受到影响的数据将返回到事物开始前的状态;如果单元中的所有sql语句均执行成功,则事物被顺利执行。


存储引擎:在mysql中的数据用各种不同的技术存储在文件(内存)中。
show engines;
事物的ACID属性
1.原子性atomicity:事务:不可再分的工作单元
2.一致性consistency:一个状态转为另外一状态的总和时不变的
3.隔离性isolation:事务之间应该时隔离的(但是需要看隔离级别)
4.持久性durability:事务一旦被提交,就是永久性的

事务的创建

隐式事务:事务没有明显的开启和结束的标记
比如insert,update,delete语句
delete from 表 where id=1;

#查看事务开启状态
show variables like "autocommit";

显式事务:事务具有明显的开启和结束的标记
前提:必须设置自动提交功能为禁用
set autocommit=0;
步骤1:开启事务
set autocommit=0;
start transaction;可选或者 begin
步骤2:编写事务中的sql语句(select,insert,update,delete)
语句1;
语句2;
。。。
步骤3:结束事务
commit;提交shiwu
rollback;回滚事务
*/

use test;
create table money(
	id int primary key,
	name varchar(20),
	balance int);
desc money;
insert into money values(1,"张三丰",1000);
insert into money values(2,"郭襄",1000);
select * from money;
#演示事务的创建步骤

#1.开启事务
set autocommit=0;
start transaction;
#2.编写事务中的sql语句
update money set balance = 500 where name="张三丰";
update money set balance = 1500 where name="郭襄";
#3.结束事务
commit;#提交
select * from money;


#演示下回滚
#1.开启事务
set autocommit=0;
start transaction;
#2.编写事务中的sql语句
update money set balance = 1000 where name="张三丰";
update money set balance = 1000 where name="郭襄";
#3.结束事务
rollback;#回滚,结果仍然是500,1500没有更改
select * from money;



数据库的隔离级别
运行多个事务,如果没有采用必要的隔离机制,会导致各种并发问题:
1.脏读,对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段,之后,若T2回滚,T1读取的内容就是临时且无效的
2.不可重复读:再次读取,值会改变
3.幻读:插入问题

数据库支持4种隔离级别
1.read uncommited(读未提交数据)
2.read commited(读已提交数据)
3.repeatable read(可重复读)
4.serializable(串行化)
oracle支持2种事务隔离级别:read commited(读已提交数据),serializable(串行化),默认read commited(读已提交数据)
mysql支持4种,默认为repeatable read(可重复读)

  

以上是关于mysql -- 事务的主要内容,如果未能解决你的问题,请参考以下文章

基础-事务

理解片段事务期间片段的生命周期方法调用

提交带有全屏片段的片段事务

使用 OnItemClickListener 列出视图片段到片段事务

Android中的片段事务问题

Android从后台堆栈中删除事务