MySQL 的表类型、存储引擎和事务

MySQL 的表类型

MySQL 的表类型由存储引擎(Storage Engines)决定,MySQL 数据表主要支类型 :

  • 事务安全型(transaction-safe):BDB、InnoBDB
  • 非事务安全型(non-transaction-safe):HEAP(Memory)、Archive、MYISAM

SHOW ENGINES; #查看当前数据库支持的引擎

在这里插入图片描述

存储引擎的选择和区别:

  • MyISAM 是非事务安全的,锁的粒度是表级,支持全文索引(倒排索引,适合文本检索),存储和查找的速度高于 InnoDB,适合小型应用和大量的 Select 操作
  • InnoDB 是事务安全的,支持行级锁定(锁定某条记录),不支持全文索引,适合大量的 Update、Insert 操作和高并发场景
  • Memory(Heap)是将数据存储在服务器内存里,避免硬盘 I/O 读写操作,速度很快,适合存储缓存数据,MySQL 重启后,表结构还在,数据丢失,功能类似 Memcache

MySQL 的事务

事务最终目的是为了保证数据的一致性,它由一系列 DML 语句(insert、update、delete、select)组成,所有语句要么全部成功,要么全部失败。当执行事务操作时,MySQL 会在被作用的表或行上加锁,当执行了 commit 语句提交事务后,会结束事务、删除保存点、释放锁,其它会话将可以查看到事务提交后的新数据。保存点是事务中的标记,用于取消部分事务,当事务结束时,会自动的删除该事务中所定义的所有保存点。

事务的特性

  • 原子性(Atomicity):表示所有的操作是一个不可分割的单元(事务),要么全部成功,事务提交,任何一个操作失败,所有操作都撤销,恢复到原始状态
  • 一致性(Consistency):表示不管事务操作成功还是失败,都不会破坏数据,不会产生脏数据
  • 隔离性(Isolation):表示并发操作时,不同的事务拥有私有的数据空间,各自操作不会产生干扰,通过不同的锁给表或行加锁达到不同的隔离程度,隔离级别越高,并发性越差,一致性越强
  • 持久性(Durability ):表示只要事务成功提交后,就算数据库宕机,重启后数据一样能恢复,也就是数据能持久性的保存下来

spring中事务的传播行为(7种):

  • PROPAGATION_REQUIRED:要求事务
  • PROPAGATION_SUPPORTS:支持事务
  • PROPAGATION_MANDATORY:委托事务
  • PROPAGATION_REQUIRES_NEW:新建事务
  • PROPAGATION_NESTED:嵌套事务
  • PROPAGATION_NOT_SUPPORTED:不支持事务
  • PROPAGATION_NEVER:禁止事务

Spring 事务管理方式:

  • 编程式事务(有 1 种):类似于 JDBC 编程实现事务管理,使用 TransactionTemplate 手动管理事务,粒度可达到代码块级别
  • 声明式事务(有3种):建立在 AOP 之上,对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务只需在配置文件设定规则(或通过基于 @Transactional 注解的方式),就可以无侵入的将事务应用到代码中,最细粒度只能到方法级别,而编程式事务可作用到代码块级别,当然也可以抽取代码块成独立的方法达到同样的目的
  • 通过注解管理事务(声明式事务),可以为每一个方法定义具体的事务属性
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值