欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL学习笔记--事务。

程序员文章站 2022-07-04 23:41:49
...

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;	(回滚)
相关标签: mysql mysql隔离