MySQL学习笔记--事务。

mysql事务

一、定义与解决问题

mysql中,事务是一个最小的不可分割的工作单元。事务能够保证一个业务的完整性。
比如我们的银行转账:

	a->-100
	updata user set money =money -100 where name='a';
	b->+100
	updata user set money=money+100 where name='b';

实际的程序中,如果只有一条语句执行成功,而另一条没有执行成功,就会出现数据前后不一致。
像这种,多条sql语句,可能会有同时成功的要求,要么就同时失败。

二、mysql中如何控制事务?
1、mysql默认是开启事务的(自动提交)
	即系统中 autocommit=1;
2、默认事务开启的作用是什么?

当我们去执行一个sql语句的时候,效果会立即体现出来,且不能回滚(事务回滚,撤销sql语句执行效果)。

	create database bank;
	create table user(
		id int peimary key,
		name varchar(20),
		money int
		);
	insert into user values(1,'a','1000');

所有即使执行 rollback; 也不能撤销上一步操作。
要执行撤销操作,应手动设置 关闭mysql的自动提交
set autocommit=0;
如果关闭了自动提交,输入rollback;便可以进行回滚。

三、事务提交方式
(1)自动提交
	系统的自动提交 autocommit=1;
	不可以回滚。
(2)手动提交
	手动设置 set autocommit=0;
	然后手动提交 commit;
(3)事务回滚
	rollback;
四、事务给我们提供了一个返回的机会。也就是手动提交方式。
(1)手动开启事务
begin  或者
start transaction;都可以帮我们手动开启一个事务。
例:begin;
	updata user set money =money -100 where name='a';
	updata user set money =money -100 where name='b';
或者:
	start transaction;
	updata user set money =money -100 where name='a';
        updata user set money =money -100 where name='b';
(2)事务开启之后,一旦提交(commit)之后就不能回滚了(rollback)。
例:
	begin;
        updata user set money =money -100 where name='a';
        updata user set money =money -100 where name='b';
此时 rollback;无效。
四、 事务的四大特征:
A 原子性:

事务是最小的单位,不可以分割。

I 隔离性:

事务1和事务2之间具有隔离性。

1、如何查看mysql的隔离级别
	mysql  8.0;
	select @@global.transcation_isolation;

	mysql 5.x;
	select @@global.tx_isolation;
2、如何修改隔离级别?
	set  global transaction isolation level read uncommitted;
	修改为 可以读未被提交的级别。
3、隔离级别
1、read uncommitted;		读未提交的(读未被提交的事务叫做脏读,实际开发中不被允许。)

会出现的问题:如果有事务a和事务b,在操作过程中,事务没有被提交,但是b可以看见a的操作结果。
2、read cmmitted; 读已经提交的(问题:不可重复读。)
会出现的问题:事务a在进行查询操作时,事务b修改了表中的数据,事务b修改的数据被事务a读到了。但是在上一步查询中并没有显示,叫做不可重复读。
3、repeatable read; 可以重复读(可能会出现:幻读)
会出现的问题:事务a和事务b同时操作一张表,事务a提交的数据,也不能被事务b读到,就可以造成幻读。
4、serializable; 串行化
优点:当表被第二个事务操作时,若第一个事务未被提交,是不可进行的,就会进入排队状态。
会出现问题: 串行化性能特差!

性能排行 1>2>3>4.

默认隔离是 repeatable read

C 一致性:

事务要求,同一事务中的sql语句,必须保证同时成功或者同时失败。

D 持久性

事务一旦结束(commit,rollback),就不可以返回。
一旦commit;就不能rollback; 一旦rollback;就不能commit;

五、事务开启:
方式(1):
	修改默认提交
	set autocommit=0;
方式(2):
	begin;
方式(3):
	start transaction;
六、事务手动提交与回滚
	commit;(手动提交)
	rollback;	(回滚)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值