MySQL之事务学习篇

事务:理解就是一个处理单元,这个处理单元里可能包含需要处理的曾删改操作,要保证这个处理单元顺利执行完成或者全部没有执行。

事务的特性:原子性,一致性,隔离性,持久性

事务分为显示事务和隐式事务,显示事务就是要开发人员操作,隐式事务默认开启自动提交功能

1.查看是否开启自动提交功能,on 是,off 否

show variables like 'autocommit';

2.设置提交方式,0 不自动,1 自动

 set autocommit=1;

 3.创建一张表

CREATE TABLE `stusent` (
  `id` int(11) NOT NULL,
  `name` varchar(30) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

4.开启事务,事务提交,回滚

START TRANSACTION;
INSERT INTO `wcy`.`stusent` ( `id`, `name`, `age` )
VALUES
	( 1, '张三', 20 );
INSERT INTO `wcy`.`stusent` ( `id`, `name`, `age` )
VALUES
	( 2, '李四', 10 );
INSERT INTO `wcy`.`stusent` ( `id`, `name`, `age` )
VALUES
	( 3, 'wangwu', 18 );
INSERT INTO `wcy`.`stusent` ( `id`, `name`, `age` )
VALUES
	( 4, 'zhaoliu', 20 );
COMMIT;
START TRANSACTION;
DELETE 
FROM
	stusent 
WHERE
	age = 20;
ROLLBACK;

5.SAVEPOINT 保存点关键字的使用;需要执行一批数据,可以将这一批数据切分为几小批处理,在某一批上设置保存点,然后在此保存点上做回滚

START TRANSACTION;
INSERT INTO `wcy`.`stusent` ( `id`, `name`, `age` )
VALUES
	( 1, '张三', 20 );
INSERT INTO `wcy`.`stusent` ( `id`, `name`, `age` )
VALUES
	( 2, '李四', 10 );
	-- 设置一个保存点
SAVEPOINT parm;
INSERT INTO `wcy`.`stusent` ( `id`, `name`, `age` )
VALUES
	( 3, 'wangwu', 18 );
INSERT INTO `wcy`.`stusent` ( `id`, `name`, `age` )
VALUES
	( 4, 'zhaoliu', 20 );
	-- 回滚到parm保存点去
ROLLBACK TO parm;
COMMIT;

select * from stusent

6.设置只读事务;只能query,不能delete,update,insert等操作

-- 设置事务只读
start transaction read only;

select * from stusent

DELETE from stusent where age = 20

 7.脏读(读未提交):一个事务在执行过程中读取到了另外一个事务未提交的数据。

例如:事务1开始执行,事务2接着执行,事务2执行过程中读取到了事务1的数据,事务1还没提交,事务1可能提交成功,可能提交失败回滚数据,导致事务2读取的数据可能存在问题,叫脏读。

8.读已提交:事务执行过程中读取到的都是其他事务已经提交的数据;

例如:事务1在执行数据读取时,读取到的数据都是事务2,3,4已经提交了的数据

9.可重复读:事务执行过程中,不管操作多少次,每次读取到的结果都是一样的。

10.幻读:在一个事务里,查询数据库中不存在数据,但是插入(修改)的时候报错,理解为幻读。

例如:事务1查询数据库表的一条数据,查询没有,接着插入一条数据,插入报错;就是幻读;

原因是事务1在查询的是时间里事务2执行了插入动作,事务1再插入的时候报错,又由于事务1是可重复读,所以每次查询的结果都一样。

11.事务的隔离级别

当有多个事务同时执行时,为确保数据的正确性,就需要事务的隔离级别来保证;

例如:当事务1执行过程中,可以让事务2读取到事务1未提交的数据,也可以限制没有权限读取到未提交的数据;

隔离级别分为4种:

读未提交:READ-UNCOMMITTED

读已提交:READ-COMMITTED

可重复读:REPEATABLE-READ

串行:SERIALIZABLE

上面4中隔离级别越来越强,并发性会低

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值