MySQL事务

发布时间:2024年01月19日

什么是事务

????事务(Transaction),就是将一组SQL语句放在同一批次内去执行,如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。
?? ?特点:一个事务中如果有一个数据库操作失败,那么整个事务的所有数据库操作都会失败,数据库数据就会回滚到该事务开始之前的状态
?? ?限制:MySQL数据库中仅InnoDB和BDB类型的数据库表支持事务

事务的ACID原则(四大原则)

????原子性(Atomic):
?? ??? ?意味着数据库中的事务执行是作为原子粒度。即不可再分,整个语句要么执行,要么不执行
?? ?一致性(Consist):
?? ??? ?即在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏
?? ?隔离性(Isolated):
?? ??? ?事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据
?? ?持续性(Durable):
?? ??? ?意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚

MySQL实现事务的方法

????SET AUTOCOMMIT:
?? ??? ?使用该语句来改变自动提交模式,等于0时关闭自动提交模式,等于1时开启自动提交模式。默认为1,使用事务时为0
?? ?START TRANSACTION:
?? ??? ?开始一个事务,标记事务的起始点
?? ?COMMIT:
?? ??? ?提交一个事务给数据库
?? ?ROLLBACK:
?? ??? ?将事务回滚,数据回到本次事务的初始状态

MySQL实现事务的步骤

? ? 1. 关闭自动提交
?? ??? ?set autocommit = 0;
?? ?2. 开始事务
?? ??? ?start transaction;
?? ?3. 执行语句
?? ??? ?sql语句
?? ?4. 结束事务
?? ??? ?-- a.
?? ??? ? commit;
??? ??? ?-- b.
??? ??? ?rollback;
?? ?5. 开启自动提交
?? ??? ?set autocommit = 1;?? ?

事务的隔离性

? ? 什么是事务的隔离性:
? ? ? ? ? ? 为了让不同的事务之间相互不存在干扰,就需要对事务的操作进行隔离,事务的隔离性也就是将操作同一个数据的事务相互分离,让操作之间分开有序的执行
?? ?实现事务的隔离性的方式:
? ? ? ? ? ? 通常数据库里都是采用锁的机制,保证事务之间的隔离性。

MySql中的锁

锁分类:
?? ?基于锁的属性分类:共享锁(读锁、S锁)、排他锁(写锁,X锁)。
?? ?基于锁的粒度分类:表锁、行锁(记录锁、间隙锁、临键锁)。
?? ?基于锁的状态分类:意向共享锁、意向排它锁。

事务的隔离级别

????事务并发问题:
? ? ? ? ? ? 在事务并发执行的时候,如果不进行事务隔离,那么就会产生脏写、脏读、重复读、幻读的问题。
?? ?事务的隔离级别:
?? ?1. READ_UNCOMMITTED 读未提交
?? ?2. READ_COMMITTED 读提交(不可重复读)
?? ?3. REPEATABLE_READ 可重复读
?? ?4. SERIALIZABLE 串行化
?? ?事务隔离级别解决的问题:
?? ?1.读不加锁,写加锁,解决脏写,存在 脏读 不可重复读 幻读
?? ?2.读加锁(每次select完成后释放),写加锁,解决 脏写 脏读,存在 不可重复读 幻读
?? ?3.读加锁(每次select完成后不释放,事务结束后释放。如果时MySQL的innodb还会加间隙锁),写加锁,解决 脏写 脏读 不可重复读 幻读(如果是MySQL的innodb则已解决),存在 幻读(不包括innodb)
?? ?4.不管读取还是修改所有的事物串行化执行,一个事务的执行必须等其他事务结束
常用的日期函数

文章来源:https://blog.csdn.net/m0_58611644/article/details/135634557
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。