您的位置:首页 > 游戏 > 手游 > 网页编辑格式_webapp开发教程_香飘飘奶茶软文_市场调研报告ppt

网页编辑格式_webapp开发教程_香飘飘奶茶软文_市场调研报告ppt

2025/4/25 2:04:39 来源:https://blog.csdn.net/2301_80802299/article/details/147365775  浏览:    关键词:网页编辑格式_webapp开发教程_香飘飘奶茶软文_市场调研报告ppt
网页编辑格式_webapp开发教程_香飘飘奶茶软文_市场调研报告ppt

目录

1. 什么是事务?

2. 事务的ACID特性

3. 为什么使用事务?

4. 如何使用事务

4.1 查看支持事务的存储引擎

4.2 语法

4.3 保存点

4.4 自动/手动提交事务

5. 事物的隔离性和隔离级别

5.1 什么是隔离性

5.2 隔离级别

5.3 查看和设置隔离级别


1. 什么是事务?

事务保证数据安全,索引提升查询效率

事务把一组SQL语句打包成一个整体,在这组SQL执行过程中,要么全部成功,要么全部失败,这组SQL语句可以是一条也可以是多条。

2. 事务的ACID特性

事务的ACID特性是指Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)。

Atomicity(原子性):一个事务中的所有操作,要么全部成功要么全部失败,不会出现执行一半的情况,如果事务在执行过程中发生错误,会回滚(Rollback)到事务开始前的状态,就像这个事务没有执行过。原子性是支持事务的数据库中最基本的一个特性。

Consistency(一致性):事务执行完成后,保证数据正确且符合预期,数据库的完整性不会被破坏。写入的数据必须完全符合所有的预设规则,包括数据的精度、关联性以及关于事务执行过程中服务器崩溃后如何恢复。

Isolation(隔离性):多个事务之间不能相互影响。数据库允许多个并发事务同时对数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务可以指定不同的隔离级别,以权衡在不同的应用场景下数据库性能和安全。

Durability(持久性):事务一旦提交,将会保存在存储介质中,即使数据库损坏也不会影响数据的安全。事务处理结束后,对数据的修改将永久写入存储介质,即便系统故障也不会丢失。

事务最终要保证一致性:一致性通过原子性、隔离性和持久性来实现

3. 为什么使用事务?

事务具备的ACID特性,使得支持事务的数据库能够简化我们的编程模型,不需要考虑各种各样的潜在错误和并发问题,在使用事务时,要么提交要么回滚,不用考虑网络异常、服务器宕机等其他因素,因此我们接触的事务本质上是数据库对ACID模型的一个实现,为应用层服务。

4. 如何使用事务

4.1 查看支持事务的存储引擎

MySQL支持事务的存储引擎是InnoDB,可以通过show engines;查看:

4.2 语法
-- 开始一个新的事务
start transaction;
-- 或
begin;-- 提交当前事务,并对更改持久化保存
-- commit之后不能再回滚,因为事务已经提交,数据已落盘
commit;-- 无论提交还是回滚,事务都会关闭-- 回滚当前事务,取消其更改(撤销所有操作,回到事务开始之前)
rollback;
4.3 保存点

在事务执行的过程中设置保存点,回滚时指定保存点可以把数据恢复到保存点的状态

-- 设置保存点
savepoint point1;
-- 回滚到第二个保存点
rollback to point2;
-- 如果只写rollback就会回滚到事务最开始
rollback;
4.4 自动/手动提交事务

默认情况下事务自动提交和回滚(发生异常时)。一个事务只包含一条DML语句

查看事务是否自动提交可以使用以下语句:

on表示自动提交开启

可以通过以下语句设置事务为自动或手动提交:

注意:

  1. 只要使用start transaction或begin开启事务,必须通过commit提交才会持久化,与是否设置set autocommit无关
  2. 手动提交模式下,不用显示开启事务,执行修改操作后,提交或回滚事务时直接使用commit或rollback
  3. 已提交的事务不能回滚

5. 事物的隔离性和隔离级别

5.1 什么是隔离性

不同的客户端对同一张表进行数据修改时可能出现相互影响的情况,为了保证不同事物之间在执行过程中不受影响,事物之间需要进行隔离,这种特性称为隔离性

5.2 隔离级别

事务间不同程度的隔离称为事务的隔离级别。不同隔离级别在性能和安全方面做了取舍,有的隔离级别注重并发性、有的注重安全性、有的并发和安全适中。MySQL的InnoDB引擎中事务的隔离级别有四种:

  • read uncommitted,读未提交(安全性最低、性能最高)(会出现“脏读”现象:事务A对数据进行修改,事务B访问事务A未提交的数据)
  • read committed,读已提交(会出现“不可重复读”现象:事务A第一次查询某条记录,事务B对此条记录进行修改并提交,事务A再次查询这条记录时,与第一次查询结果不一致)
  • repeatable read,可重复读(默认)(会出现“幻读”现象:两次查询得到的结果集不同)(InnoDB存储引擎中,使用了next-key锁,锁住了目标行和之前的间隙,解决了部分的幻读问题)
  • serializable,串行化(安全性最高、性能最低)(解决了所有的数据安全问题,所有事务都是一个挨一个执行,一个事务必须要等到上一个事务执行完才能执行)

5.3 查看和设置隔离级别

事务的隔离级别分为全局作用域会话作用域,查看不同作用域事务的隔离级别,可以使用以下方式:

# 全局作用域
select @@global.transaction_isolation;
# 会话作用域
select @@session.transaction_isolation;

可以看到默认的事务隔离级别是repeatable-read(可重复读)

# 通过global|session分别指定不同作用域的事务隔离级别
set [global|session] transaction isolation level level|access_mode;# 隔离级别
level:{repeatable read  # 可重复读| read committed   # 读已提交| read uncommitted # 读未提交| serializable     # 串行化
}# 访问模式
access_mode:{read write #表示事务可以对数据进行读写| read only  #表示事务只读,不能对数据进行读写
}# 示例
# 设置全局事务隔离级别为串行化,后续所有事务生效,不影响当前事务
set global transaction isolation level serializable;
# 设置会话事务隔离级别为串行化,当前会话后续的所有事务生效,不影响当前事务,可以在任何时候执行
set session transaction isolation level serializable;
# 如果不指定任何作用域,设置只针对下一个事务,随后的事务恢复之前的隔离级别
set transaction isolation level serializable;
# 方式一
set global transaction_isolation='serializable';
# 注意使用set语法时有空格要用'-'代替
set session transaction_isolation='repeatable-read';# 方式二
set @@global.transaction_isolation='serializable';
# 注意使用set语法时有空格要用'-'代替
set @@session.transaction_isolation='repeatable-read';

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com