ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql -- 事务

2019-09-23 22:02:02  阅读:154  来源: 互联网

标签:语句 事务 set name money update 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;可选
步骤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(可重复读)

  

标签:语句,事务,set,name,money,update,mysql
来源: https://www.cnblogs.com/ivyharding/p/11575165.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有