事务---关于事务的一系列知识
程序员文章站
2024-03-20 21:23:10
...
事务—关于事务的一系列知识(当然,有事务,就会和线程分不开啦~)
其实在mysql数据库中,唯一能够提供事务功能的引擎,便是innodb,其余的
包括myisam,黑洞引擎,内存引擎,都不支持事务操作。当然选择什么样的引擎
还是要看想要实现什么样的业务,例如你想要实现日志服务器,那么你就用黑洞引擎,
你先要提高查询的效率,但是并不在意事务上的操作,那么你就用myisam,如果你
数据量很少,那么就用内存引擎,随便你,啊哈哈哈哈。好像说跑偏了~~~
什么是事务?
事务是作为单个逻辑工作单元执行的一系列操作;
这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;
事务是一组不可再分割的操作集合(工作逻辑单元);
事务的四大特性ACID?
特性 | 英文 |
---|---|
原子性 | Atomicity |
一致性 | Consistency |
隔离性 | Isolation |
持久性 | Durability |
(具体的不再阐述)本身新进开发一枚,阅历不深,多多指教。
事务提交的三种方式?
包括:显式提交,隐式提交,自动提交。
其中:
显式提交也就是commit
隐式提交是:SQL命令间接完成的提交为隐式提交,隐式提交不能回滚
自动提交:AUTOCOMMIT设置为ON
事务七大传播机制?
1.required 如果当前没有事务,就新建一个事务,
如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
2.supports 支持使用当前事务,如果当前事务不存在,则不使用事务。
3.mandatory 中文翻译为强制,支持使用当前事务,如果当前事务不存在,则抛出Exception。
4.requires_new 创建一个新事务,如果当前事务存在,把当前事务挂起
5.not_supported无事务执行,如果当前事务存在,把当前事务挂起。
6.never 无事务执行,如果当前有事务则抛出Exception。
7.nested 嵌套事务,如果当前事务存在,那么在嵌套的事务中执行。
如果当前事务不存在,则表现跟REQUIRED一样。
事务四大隔离级别?
1.读未提交 Read Uncommited
这是事务最低级的隔离级别,会引起脏读,不可重复度,以及幻读
说白了,就是一个事务可以读到另外一个事务未提交的数据
2.读已提交 Read Commited
这种隔离级别避免了脏读,但是还是会引起不可重复读,以及幻读
那么为什么避免了脏读呢?
这是因为,当开启读已提交时,一个事务要等待另外一个事物提交后,才能进行读取操作。
但是!!!当两次同样的查询操作,查询出的两次结果是不同的,因为当中允许修改操作,故会引起不可重复读
3.可重复度 Repeatable read
这种隔离级别避免了避免了脏读,不可重复读
也就是当两次同样的查询操作,中间不在允许修改数据操作,故可以避免了不可重复读
4.序列化 Serializable
最可靠的事务隔离级别(还可以解决幻读的问题)
幻读的问题也就是两个事物之间发生的insert操作
扩展
我们的数据库,例如mysql是可以支持事务的,DML语句要嘛会进行提交,当然也可以进行回滚,那么是什么保证的呢?
当然我们在进行更新操作的时候,所有的dml操作,数据库底层都会保存一个东西,那就是该数据的日志。
当然,大家放心,数据库在进行修改数据的时候,一定会将对应的日志保存到日志中,且会在保存日志后,
再进行对应的删 除,更新之类的操作,这样保证了一个数据库的事务能力。
当然,当事务发生回滚的时候,会对原有数据进行覆盖,这种覆盖,我们可以起个名字,就叫做操作的幂等性,
无论对事务回滚多少次,重复的覆盖,仍然会是原来的数据。
那我再讲讲,数据库是什么东西呢?
其实很早之前,我们的无纸化办公,是对于文件的操作,那时候还没有数据库,对于文件的直接操作(即数据),
便是我们的日常办公,但是对于存储数据的文件,有着很大的不确定性或者说是弊端:
1.无法完成同样文件数据的同步。
2.当查询内容的时候,例如及格的人数,最高的分数等等,都会给工作者造成过多的麻烦。
3.不同办公软件对于文件的解析方式是不同的,有些并不支持跨平台
那么,就有人提出了:为何不在我们的原本操作(应用层)与文件层之间添加一层抽象层,来确保我们能够解决
如上问题嘛!
自此,数据库的基本雏形,开始呈现,当然会随着人们对于需求的不同,数据库本身还会增加例如事务,添加权限等。
最后添加一句,对于java最新引入与数据库达成协议(JDBC)的是mysql
推荐阅读
-
事务---关于事务的一系列知识
-
PHP利用闭包实现MySQL事务场景下缓存一致性的模型
-
自动支持事务的类 博客分类: 原创 BeanJDBCAOP
-
对一个所谓 “真正的测试spring并发的事务正确性” 的证伪
-
有关Lucene的问题(6):Lucene的事务性 博客分类: 有关Lucene的问题 lucene多线程
-
有关Lucene的问题(6):Lucene的事务性 博客分类: 有关Lucene的问题 lucene多线程
-
事务的隔离级别 博客分类: 数据库 事务数据库sql隔离ACID
-
分布式事务的Base原理 博客分类: Java base分布式事务原理分布式原理
-
acid 数据库事务正确执行的四个基本要素 acid
-
事务相关知识总结 博客分类: Spring transactionspringjavasqlacid