事务隔离级别|JAVA|数据库

在 Java 中,如果你在一个事务内执行了插入操作,然后马上去查询该表数据,能否查到新插入的记录,取决于数据库隔离级别:

数据库事务隔离级别(如 MySQL、PostgreSQL、Oracle 等)

1. 事务隔离级别 (Transaction Isolation Level)

事务的隔离级别决定了一个事务中的数据变化对其他事务的可见性。不同的隔离级别会影响查询到新插入记录的行为。常见的事务隔离级别有:

  • READ UNCOMMITTED:最低隔离级别,允许读取未提交的数据。此时,其他事务可以看到尚未提交的数据。
  • READ COMMITTED:默认的隔离级别,大部分数据库使用该级别。在这个级别下,你只能看到已经提交的事务数据。由于你在同一个事务内插入并查询数据,因此你能够看到自己事务内插入的记录。
  • REPEATABLE READ:确保在事务执行过程中,读取的数据不会被其他事务修改,查询结果是一致的。但不会看到其他事务插入的数据。
  • SERIALIZABLE:最高的隔离级别,确保事务之间完全隔离。即使是读取操作,也不允许看到其他事务的修改或插入。

2. 数据库的事务处理方式

大多数数据库在同一个事务内的操作(包括插入、更新、删除、查询)是可以看到自己事务中的未提交数据的。这意味着在事务内执行插入操作后,立刻查询该表,理论上是能够看到你刚插入的记录的。

3. 事务提交与查询

如果你还没有提交事务(即使用 commit),但在同一事务中查询数据,一般是可以看到自己已插入的数据的。只有在数据库设置了较高的事务隔离级别(如 REPEATABLE READSERIALIZABLE)时,才可能影响查询结果,但这一般不会影响同一事务内的操作。

4. 数据库实现的细节

不同的数据库可能会有一些细节差异,但大多数数据库(如 MySQL、PostgreSQL、Oracle 等)在默认的事务隔离级别下(通常是 READ COMMITTED)会允许同一事务内看到自己插入的数据。

结论

在数据库设置了较高的事务隔离级别(如 REPEATABLE READSERIALIZABLE)时,同一个事务内未提交的数据,依然是可以被查询到的。不过需要理解的是,这种事务隔离级别主要影响的是事务之间的可见性,而不是同一事务内的操作。

1. REPEATABLE READ(可重复读)

REPEATABLE READ 隔离级别的主要特点是:在事务内对某个数据的所有读取操作结果都应该是一样的。具体来说:

  • 同一事务内:无论你在事务内查询多少次某个数据(即使是多次读取相同的数据),结果都是一致的。也就是说,你能够读取到自己事务内尚未提交的操作所引入的数据。
  • 不同事务之间:这个隔离级别保证了一个事务在执行过程中不会看到另一个事务已经修改但未提交的数据,因此其他事务无法看到你未提交的数据。但是你自己在同一个事务中是可以查询到这些数据的。

2. SERIALIZABLE(可串行化)

SERIALIZABLE 是最高的事务隔离级别,确保事务完全隔离,避免任何并发问题。具体特点是:

  • 同一事务内:你依然可以查询到自己未提交的数据。也就是说,如果在一个事务内执行了插入操作或更新操作,然后在该事务内执行查询,你是可以看到自己事务内未提交的数据的。
  • 不同事务之间:在 SERIALIZABLE 隔离级别下,数据库会避免产生并发问题,确保事务像串行执行一样,保证事务之间完全隔离。对于其他事务来说,它们不能看到你的未提交数据,甚至可能会因为锁定或资源竞争被阻塞。

总结

  • 同一事务内,无论你使用 REPEATABLE READ 还是 SERIALIZABLE 隔离级别,你都可以查询到自己未提交的数据
  • 事务隔离级别 主要控制的是 不同事务之间 的数据可见性。较高的隔离级别(如 REPEATABLE READSERIALIZABLE)确保事务之间不会互相影响,特别是对其他事务未提交数据的访问。

因此,在同一个事务内,插入、更新、删除等操作所带来的数据变化,是可以被自己事务中的查询语句看到的,无论你使用的事务隔离级别是 READ COMMITTEDREPEATABLE READ 还是 SERIALIZABLE

java事务隔离级别

在 Java 中,通过 javax.sql.DataSourcejava.sql.Connection 设置事务的隔离级别时,常用的隔离级别有 5 种,它们对应于数据库的事务隔离级别。以下是 Java 事务隔离级别和数据库隔离级别的对应关系:

  1. Connection.TRANSACTION_NONE
    这个级别表示不支持事务,通常用于不需要事务控制的操作。
  2. Connection.TRANSACTION_READ_UNCOMMITTED
    对应数据库的 READ UNCOMMITTED 隔离级别,允许读取其他事务未提交的数据。此级别可能会导致脏读。
  3. Connection.TRANSACTION_READ_COMMITTED
    对应数据库的 READ COMMITTED 隔离级别,确保读取的数据是已提交的数据,但可能会发生不可重复读。
  4. Connection.TRANSACTION_REPEATABLE_READ
    对应数据库的 REPEATABLE READ 隔离级别,确保在同一事务内,多次读取相同数据时结果一致。但可能会遇到幻读(phantom read)。
  5. Connection.TRANSACTION_SERIALIZABLE
    对应数据库的 SERIALIZABLE 隔离级别,确保事务之间完全隔离,避免并发冲突。此级别会大幅降低并发性能。

总结:

  • Java 的事务隔离级别 实际上是 Java 代码通过 JDBC 或 ORM 框架(如 Hibernate)设置的,它对应于数据库事务隔离级别的标准。
  • 数据库的事务隔离级别 是指数据库管理系统(DBMS)实际处理事务隔离的方式。

在实际应用中,当你在 Java 中设置了某个事务隔离级别,它会影响到数据库事务的行为。通常情况下,Java 的事务隔离级别与数据库的事务隔离级别一致。

本文作者:Journey&Flower

本文链接:https://www.cnblogs.com/JourneyOfFlower/p/18326872

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Journey&Flower  阅读(60)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 404 Not Found REOL
  2. 2 白色恋人 游鸿明
  3. 3 盛夏的果实 莫文蔚
  4. 4 以父之名 周杰伦
  5. 5 晴天 周杰伦
  6. 6 简单爱 周杰伦
  7. 7 东风破 周杰伦
  8. 8 稻香 周杰伦
  9. 9 爱在西元前 周杰伦
  10. 10 千里之外 费玉清-周杰伦
  11. 11 偏爱 张芸京
  12. 12 大海 张雨生
  13. 13 月亮惹的祸 张宇
  14. 14 雨一直下 张宇
  15. 15 过火 张信哲
  16. 16 隐形的翅膀 张韶涵
  17. 17 天下 张杰
  18. 18 当你孤单你会想起谁 张栋梁
  19. 19 清明雨上 许嵩
  20. 20 玫瑰花的葬礼 许嵩
  21. 21 断桥残雪 许嵩
  22. 22 城府 许嵩
  23. 23 等一分钟 徐誉滕
  24. 24 客官不可以 徐良_小凌
  25. 25 坏女孩 徐良_小凌
  26. 26 犯贱 徐良
  27. 27 菠萝菠萝蜜 谢娜
  28. 28 贝多芬的悲伤 萧风
  29. 29 睫毛弯弯 王心凌
  30. 30 我不是黄蓉 王蓉
  31. 31 秋天不回来 王强
  32. 32 今天你要嫁给我 陶喆,蔡依林
  33. 33 丁香花 唐磊
  34. 34 绿光 孙燕姿
  35. 35 求佛 誓言
  36. 36 十一年 邱永传
  37. 37 下辈子如果我还记得你 马郁
  38. 38 一千年以后 林俊杰
  39. 39 江南 林俊杰
  40. 40 曹操 林俊杰
  41. 41 背对背拥抱 林俊杰
  42. 42 会呼吸的痛 梁静茹
  43. 43 勇气 梁静茹
  44. 44 爱你不是两三天 梁静茹
  45. 45 红日 李克勤
  46. 46 星月神话 金莎
  47. 47 嘻唰唰 花儿乐队
  48. 48 穷开心 花儿乐队
  49. 49 六月的雨-《仙剑奇侠传》电视剧插曲 胡歌
  50. 50 一个人的寂寞两个人的错 贺一航
  51. 51 好想好想-《情深深雨濛濛》电视剧片尾曲 古巨基
  52. 52 情人 刀郎
  53. 53 冲动的惩罚 刀郎
  54. 54 西海情歌 刀郎
  55. 55 2002年的第一场雪 刀郎
  56. 56 红玫瑰 陈奕迅
  57. 57 浮夸 陈奕迅
  58. 58 爱情转移 陈奕迅
  59. 59 独家记忆 陈小春
  60. 60 记事本 陈慧琳
  61. 61 看我72变 蔡依林
  62. 62 寂寞在唱歌 阿桑
  63. 63 樱花草 Sweety
  64. 64 中国话 S.H.E
  65. 65 波斯猫 S.H.E
  66. 66 杀破狼-《仙剑奇侠传》电视剧片头曲 JS
  67. 67 Lydia F.I.R.
  68. 68 I Miss You 罗百吉_青春美少女.
白色恋人 - 游鸿明
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 林利南

作曲 : 游鸿明

编曲 : 涂惠源

冷空气 却清晰

你在南极冰山雪地里

极光中雪白的肌肤

是哀愁是美丽

为了要遇见你

我连呼吸都反复练习

兰伯特仁慈的冰川

带领我走向你

零下九十一度的酷寒

滚滚红尘千年的呼喊

藏在沃斯托克的湖岸

沉寂轻叹

撒哈拉漫天狂沙 金字塔谁能解答

兵马俑谁与争锋 长城万里相逢

人世间悲欢聚散 一页页写在心上

含着泪白色恋人 却有灰色的年轮

零下九十一度的酷寒

滚滚红尘千年的呼喊

藏在沃斯托克的湖岸

沉静轻叹

撒哈拉漫天狂沙 金字塔谁能解答

兵马俑谁与争锋 长城万里相逢

人世间悲欢聚散 一页页写在心上

含着泪白色恋人 却有灰色的年轮

撒哈拉漫天狂沙 金字塔谁能解答

兵马俑谁与争锋 长城万里相逢

人世间悲欢聚散 一页页写在心上

含着泪白色恋人 却有灰色的年轮