事务学习
什么是事务? 事务是用于保证数据的一致性的,它由一组相关的dml(增删改)语句组成,该组的语句要么全部成功,要么全部失败。 如:转账就是用事务来处理,用以保证事务的一致性。 事务和锁 当执行事务操作(dml语句)时,mysql会在表上面加锁,防止其他用户改表的数据,这对用户来讲是非常重要的。 mysql数据库控制事务的几个重要操作(基本操作) 1.start transaction --开始一个事务 2.savepoint 保存点名 --设置保存点 3.rollback to 保存点名 --回退事务 4.rollback --回退全部事务 5.commit --提交事务,所有事务生效,不能退回。 回退事务 在介绍回退事务前,先设置一下保存点(savepoint),保存点是事务中的点,用于取消部分事务,当结束事务时(commit),会 自动的删除该事务的全部保存点。当执行回退事务时,通过我们提前设置的保存点进行回退。(如果是回退的很早之前,那么后面的 保存点也就被跟着删除了)。 提交事务 使用commit语句就可以提交事务了,当执行commit语句后,会确认事务的变化、结束事务、删除保存点、释放锁,数据生效。当使用commit语句 结束事务后,其他会话(其他连接)将可以查看到事务变化后的新数据(所有数据就正式生效了)。 演示: 1.创建一张表 create table test9( id int, `name` varchar(30) ) 2.开启事务 start TRANSACTION; select * from test9; 3.设置保存点 savepoint a; 4.dml(删改查)操作 insert into test9 VALUES(1 , 'tom'); savepoint b; update test9 set name = 'jack' where id =1; 5.回退 rollback to b; 6.提交(正式生效) commit; mysql事务细节: 1.如果不开始事务,默认情况下,dml操作是自动提交的,不能回滚。 2.如果开始一个事务,但是没有设置保存点,你可以执行rollback操作,默认就是回退到你事务开始的状态。 3.你可以在事务里面创建多个保存点。 4.你可以在事务没有提交前,选择回到你想回到的保存点。 5.mysql的事务机制需要innodb的存储引擎才可以使用,myisam不可以使用。 6.开始一个事务start transaction 或者 set autocommit=off
事务的隔离级别
视频链接:70韩顺平MySQL_4种隔离级别哔哩哔哩_bilibili
mysql事务的隔离级别: 1.事务管理级别介绍: 多个连接开启各自事务操作数据库中的数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性。 2.如果不考虑隔离性,可能会引发如下问题: 脏读:当一个事务读取到另外一个事务尚未提交的修改时,产生脏读。 不可重复读:同一个查询在同一个事务里面多次查询,由于其他事务提交了修改或者删除,导致每次返回的结果都不一致。产生不可重复读。 幻读:同一个查询在同一个事务里面多次查询,由于其他事务提交了插入操作,导致每次返回的结果都不一致。产生幻读。 -- 其实只需要理解隔离这个概念,就清楚了。
看视频,不爱写了。现在我倒是懂了。
特性:
原子性:不可分割,要么都发生,要么都不发生。
一致性:事务必须使数据库从一个一致性状态变换成另外一个一致性状态。
隔离性:是指多个用户并发访问数据库时,数据库为每一个用户开启一个事务,不被其他事务干扰,多个事务之间要相互隔离。
持久性:持久性是指,事务一旦提交,它对数据的改变就永久生效。哪怕数据库故障也是生效的。