事务:理解就是一个处理单元,这个处理单元里可能包含需要处理的曾删改操作,要保证这个处理单元顺利执行完成或者全部没有执行。
事务的特性:原子性,一致性,隔离性,持久性
事务分为显示事务和隐式事务,显示事务就是要开发人员操作,隐式事务默认开启自动提交功能
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中隔离级别越来越强,并发性会低