- 浏览: 509867 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (650)
- 测试页面 (1)
- 分页 (1)
- 打包war (0)
- 打包war+代理上网 (0)
- 打包war+代理上网+选号 (1)
- 不解,贴代码 (3)
- 娱乐 (1)
- 广东11选5前2直选 (1)
- 广东11选5任5 (1)
- 转载 滚动条 移动弹出框 (1)
- oracle打包命令 (1)
- 鼠标移上去显示菜单-转载 (1)
- fixed 兼容ie6--转载 (1)
- 延迟加载兼容ie (1)
- ff (1)
- iframe高度自适应,去掉滚动条 (1)
- ajax验证+iframe提交 (1)
- 随机数+组合 (1)
- jstl自定义标签 (1)
- jar包查找,下载网站 (1)
- UltraEdit中使用正则表达式 (1)
- Spring--quartz中cronExpression配置说明-转载 (2)
- log4j的配置使用---转载 (1)
- 表解锁表解锁 (1)
- js打印js打印--转载 (0)
- 选项卡选项卡 (0)
- 广东11选5 分析数据 (0)
- package规范package规范package规范package规范 (0)
- weblogic10.3.2_security_um_provider配置+PAFA新架构规范 (0)
- 小数点金额验证 (1)
- TOT项目开放代码 (0)
- 开发注意点开发注意点开发注意点开发注意点 (0)
- sql ibatis配置优化 (1)
- http://elf8848.iteye.com/blog/875830 (0)
- http://fhd001.iteye.com/blog/1131802 (0)
- oracle排序----oracle排序---- (1)
- oracle dba的练习 参考数据 (0)
- oracle dba的练习 参考数据恢复数据 (0)
- oracle dba的练习 参考数据恢复数据 with as去重 (1)
- css实现强制不换行/自动换行/强制换行-转载 (1)
- tomcat认证tomcat认证 (1)
- 人民币小写转大写 (1)
- jndi 美化输入框 (1)
- web servcie介绍 (1)
- mootools 弹出框 (1)
- 代码分享代码分享代码分享 (0)
- sql注入错误 (0)
- 自动导入数据 (0)
- 短信开发 (0)
- JS自动登录 (0)
- JS自动登录---wscript.exe (0)
- 删除指定文件夹 (1)
- <script src="http://code.jquery.com/jquery-latest.js"></script> (1)
- 测试页面修正 (0)
- JS日历控件 (1)
- JS联动控制 (1)
- JAVA 删除项目的.SVN目录文件夹 (1)
- STRUTS2配置项+FIREFOX必装插件 (1)
- 禁止按后退键 (1)
- java正则验证金额 (1)
- JAVA主键随机+SELECT联动+数据库随机取数+F5刷新+字符编码乱码+FORM提交乱码 (0)
- JAVA也有SB的时候 (1)
- FOOD 代码 (1)
- oracle中copy from的用法 (1)
- myeclipse注册机 (0)
- STRUTS2的又一个BUG (0)
- STRUTS2的又一个BUG NO ACTION AND RESULT (1)
- JOB quartz执行代码 (1)
- ORACLE数据恢复 ORA-08181 (1)
- 建库初始化 建表空间 建表 (0)
- 事务 不可重复读 幻想读 脏读 (1)
- ORACLE的HINT详解 (1)
- DBA操作常用命令 (1)
- 解决IE6的PNG透明JS插件 DD_belatedPNG (1)
- 正则测试表达式 (1)
- HTML 中嵌入FLASH文件 (1)
- JS日期指定格式化 (1)
- oracle11g安装图解+WebLogic12安装过程详解 (1)
- 创建DB_LINK方法 (1)
- spring使用模板发送邮件及附件笔记 (1)
- 64位weblogic11g安装 (1)
- PLSQL开发笔记和小结(转) (1)
- 自动跳转到指定页面 (1)
- 用JS遍历DOM(使用NodeIterator和TreeWalker) (1-转) (0)
- 用JS遍历DOM(使用NodeIterator和TreeWalker) (转) (1)
- IDEA12 安装JRebel插件(转) (1)
- BeanUtils.copyProperites apache和spring (1)
- Cannot retry request with a non-repeatable request entity. The cause lists the reason the original request failed (1)
- JSP学习笔记(一百零五):spring下jndi配置的问题 (1)
- java 文本文件 另存为 ANSI UTF-8 (1)
- eclipse内存溢出报错:java.lang.OutOfMemoryError:Java heap space. (1)
- Oracle的UTL_FILE.FOPEN的用法(转) (1)
- JDBC打印最终执行sql语句 (1)
- Super Flexible File Synchronizer软件备份介绍 (1)
- 数据库常用操作 (1)
- weblogic配置虚拟目录 (1)
- JS登陆常用效验 (1)
- struts1的bean:write用法(转) (1)
- 工资计算公式 (1)
- SPFS_EXPRESS 字符串 公式 计算 (0)
- SPFS_EXPRESS 字符串 公式 计算 字符串型表达式的值 (1)
- 前端自动跳转 (1)
- DBMS_JOB 用法 (1)
- 备份数据库BAT脚本 (1)
- JS打印 (0)
- JS打印 弹出页面 (1)
- ORACLE截取字符串 (1)
- JS输入框替换 输入整数 (1)
- sdfdasf (0)
- 网站建设笔记 (1)
- JS表格头部固定-转 (1)
- JS表格头部固定-转 (2) (1)
- org.json.JSONArray LIST转JSON (1)
- jquery easyui 表头固定 datagrid 弹出框 AJAX刷新页面 (1)
- ORACLE 字符 数字 日期之间转化 (1)
- 检测键盘的 CAPS LOCK开关 (1)
- oracle ebs系统维护技巧汇总(原创+转载) (1)
- EBS开发记录 (1)
- 页面校验 SQL注入 字符串只含数字、字母、汉字组成 (1)
- EBS开发记录 FORM REPORT 基本玩意 (1)
- Oracle EBS 报表输出字符字段前部"0"被Excel自动去掉问题 (1)
- ERP工厂 订单 品名 PO 出货单 客人sql (1)
- EBS账号密码解密 (1)
- jtf_rs_defresources_srp_v引起的问题 (0)
- jtf_rs_defresources_srp_v引起的问题 同义词无数据 基表有数据 (1)
- ORACLE汉字排序 取分组最大时间记录 ebs客户别名 编码 名称 (1)
- 更新表、备份表、 (1)
- AJAX需要注意的问题 (1)
- 远程桌面 本地桌面 不能复制 (1)
- IIS运行内部服务器500 (1)
- 访问ASP页面报错 Microsoft JET Database Engine (0x80004005) (1)
- 错误类型:Microsoft JET Database Engine (0x80040E09) 不能更新。数据库或对象为只读 (1)
- ORACLE、SQLSERVER数据交互 (1)
- Tomcat内存设置详解 (1)
- 好看的弹出框 (1)
- FLT语法(转) (1)
- weblogic 11G 虚拟目录映射weblogic.xml配置 (1)
- weblogic.xml在项目中设置的注意点(转) (1)
- MVN安装jar包命令 (1)
- Maven + Nexus + SVN + Eclipse 配置步骤说明 (1)
- 关于JSP和struts绑定CHECKBOX保存数据库,数据库读取默认选择的问题的研究 (0)
- 关于JSP和struts绑定CHECKBOX保存数据库,数据库读取默认选中的问题的研究 (1)
- java FTP上传文件,下载文件 (1)
- ECLIPSE构建java项目转web项目 (1)
- MySQL设置字符集为UTF8(Windows版) (1)
- pipe row的用法 (1)
- Oracle split 函数写法. (1)
- 物化视图的建立 (1)
- JS容错,出现错误就不会提示了 (1)
- oracle 的存储过程 传数组操作和java结合 (1)
- 一篇很全的freemarker-转 网络 (1)
- 销售订单要经历登记、发放、挑库、交货四个主要环节 (1)
- 采购订单 (1)
- 订单行 (1)
- 发运行 (1)
- 分配行 (1)
- EBS REPORT开发 (1)
- 最好看的弹出框 前端页面开发需要的 (1)
- 常用的前端插件layer和易U jalert niceValidator (0)
- 常用的前端插件layer和易U jalert niceValidator lhgdialog (1)
- oracle 死锁处理办法 (1)
- ERP2 shiro+hibernate4+struts2+spring+easyui+fusioncharts (1)
- 样式美工参考网站 (1)
- 利用eclipse构建和部署maven工程 (1)
- 【Shiro + Spring MVC整合】教程——权限控制 (转) (1)
- SQL取每行的最大记录 (1)
- 行转列 ,分组取最大,统计数量 (1)
- Oracle EBS中的“客户”、"客户地点"、‘订单’之间的关系 (1)
- oracle数据库导入导出命令! (0)
- oracle数据库导入导出命令! 更改字符集 (1)
- 应用部署文档说明 (1)
- setDomainEnv.cmd weblogic 内存溢出 (1)
- 美工素材 站酷 千图网 昵图网 (1)
- 按钮等点击有虚线边框 (1)
- oracle数据库插入特殊字符‘&’ (1)
- tomcat控制台日志 (1)
- 一些常用的Bootstrap模板资源站 (1)
- 发短信的限制 、验证 (1)
- Hibernate操作语法 (1)
- 常用的报表工具 仪表盘 (1)
- ORACLE in 录入排序 (1)
- Eclipse Class Decompiler——Java反编译插件 (转) (1)
- report builder (1)
- HTML登陆框 (1)
- oracle ebs账号密码 (0)
- ORACLE转 字符串 split 数组数据库 (1)
- http://tool.oschina.net/apidocs (1)
- android包 (1)
- jd gui windows (1)
- 腾讯微信红包算法 (1)
- JAVA加密解密(转) (1)
- 弹出层 (1)
- 表单重复提交 (2)
- struts2的漏洞 (1)
- 前端开发js网站 (1)
- SpringMVC学习系列-后记 解决GET请求时中文乱码的问题 (1)
- SpringMVC的相关教程 (1)
- Android Studio创建Xposed模块项目时BridgeApi的正确添加方式 (0)
- xposedbridge问题收集 (1)
- SVN使用详情 (1)
- 设置内存 (1)
- 事务(转载) (1)
- mybatis自动生成xml (1)
- IDEA 常见设置和快捷键 (1)
- IDEA的配置-崩溃了,打不开的方法 (1)
- APP破解动态 (1)
- 反编译工具 (1)
- springmvc 绑定参数大全 (1)
- JAVA罕见的高级用法 (1)
- JAVA基于xposed抢红包的源码,转发一下。给懂的人看看。 (1)
- android调试 (1)
- 微信红包透视研究所得 (1)
- 6K抢红包分析原理。 (1)
- 自动生成ibatis (0)
- 触动精灵 (1)
- 增大内存 (1)
- SQLSERVER 2008 R2 (1)
- maven中央库自己搭建 (1)
- gitblit-1.8.0 localhost需要cert (1)
- springboot热部署 (1)
- springcloud springboot 2多数据源 transactional 冲突,无效 (1)
- SPRING cloud config (1)
- springboot TEST 类 (1)
- JS前端加密,java后台解密,cookie获取,url参数 (1)
- js base64中文乱码 (1)
- IDEA 注册码,2018最新有效 (1)
- SPRING mvc 讲解 (1)
- springboot 测试 (1)
- springboot 查看所有beans (1)
- Transaction事务注解和DynamicDataSource动态数据源切换问题解决 (1)
- springboot打印日志 (1)
- https://my.oschina.net/u/3768341/blog/2054605 (1)
- 批处理发布 (1)
- springboot study (1)
- 分布式事务处理 (1)
- 杀进程 (1)
- maven打包3种方法 (1)
- 微信开发jar包 (1)
- 微信公众号测试打包 (1)
- 微信api (1)
- webservice访问 (1)
- springboot 主函数 (1)
- springboot拦截器 (1)
- thymeleaf语法 (1)
- java 公众号开发 (1)
- 公众号发送消息-body (1)
- 不规则地图选中问题 (1)
- xshell破解版 (1)
- xposed开发 (1)
- nginx安装 (1)
- jeeplatform (1)
- linux命令 (1)
- 个人微博前端 (1)
- UI设计灵感 (1)
- git安装 (1)
- springboot学习 (1)
- 电视直播盒子破解 (1)
- PPTV原视频 (1)
- DJ下载 (1)
- 精易论坛 (0)
- 快速收集支付宝5福,精品 (1)
- 抖音视频下载 (1)
- 抓包工具 (1)
- 支付宝金额 (1)
- 苹果CMS (1)
- dplayer (1)
- SSO登录 (1)
- shiro权限设计 (1)
- 后台框架 (1)
- OAuth2.0协议入门-单点登录 (1)
- Spring Boot集成AD域实现统一用户认证 (1)
- 分组展示sql server (1)
- 单点登录sso token验证 (1)
- 泛微OA集成方案 (1)
- 使用verdaccio 搭建私有npm 服务器 (1)
- 使用verdaccio 搭建私有npm 服务器 插件库 (1)
- Spring Boot 与 Vue.js 整合实践 (1)
- oauth2 (1)
- spring开启https (1)
- 前后端分离 (0)
- cross跨域解决 (1)
- jwt保护前后端分离 (1)
- USB禁用 解开 (1)
- swagger2定制化 (1)
- JWT生产token (1)
- 前后端分离 elementui+vue2 (1)
- vue中axios的封装 (1)
- webservice发布 (1)
- sketch转psd (1)
- 跨域问题服务器、客户端 (1)
- AES SPRINGBOOT (1)
- 安装禅道 (1)
- crossorigin (1)
- vue视频教学 (1)
- SpringBoot+JWT+Shiro+MybatisPlus实现Restful快速开发后端脚手架 (1)
- lombok (2)
- mybatis-plus+ds数据源 lombok (1)
- SVN搭建服务器 (1)
- 重启nginx (1)
- mybatis-generator-gui (1)
- 自关联取最大 (1)
- 设计网 (0)
- vue的编写 (1)
- vue结合上传 (1)
- 文件上传设置大小 (1)
- 逆向编译 (1)
- springboot 整合quartz (1)
- VUE全套教材 (1)
- springboot部署 (1)
- springboot发布 (2)
- docker (1)
- 登录只一个设备登录 (1)
- 超级详细的springboot基础 (1)
- springboot项目在cmd窗口运行后台卡顿问题 (1)
- JMeter性能测试,完整入门篇 (1)
- springboot文件上传与下载 (1)
- CXF与springboot结合 (1)
- base64 Md5Hash (0)
- idea 注册2019 2018 亲测有效 (1)
- luyten jadx (1)
- 文件上传过大报错 (1)
- 正则表达式(.*?)惰性匹配(终于TM的搞懂了) (1)
- cookie删除 (1)
- sqlserver行转列 (1)
- 调用微信内置的方法及wx.config的配置问题 (1)
- JS-sdk 微信 (1)
- journalctl -n 20 tail less (1)
- 前后端项目 (1)
- 泛微网络表 (1)
- 证书问题导入 日志输出 (1)
- jmeter TPS和响应时间插件的 (1)
- 压测-添加插件 (1)
- 草稿 (0)
- gp走势图解析 (0)
- js加密解密 (1)
- poi excel (1)
- jadx反编译 (1)
- 金蝶文档 (1)
- SVN分支 (1)
- XML解析 (1)
- webservice调用 (0)
- 金蝶表关系 (0)
- 泛微培训 (0)
- wss调试 (1)
- idea激活 (0)
- List分组每500一组 (1)
- ZooInspector ZooViewer (1)
- jsoup解析 (1)
- table td的width 无效 (1)
- Map 升降排序 (1)
- BurpSuite_Pro v2.1 分享及使用 (中文破解版) (0)
- 模拟器抓包 (1)
- nginx 文件上传解除 (1)
- mysql 8安装教程 (1)
- DBUtil操作 (1)
- 实现 Java 多线程并发控制框架 (1)
- nginx配置图片 (1)
- springboot 上传下载图片 (1)
- 激活windows (0)
- java 数字格式化万、亿 (1)
- java 爬虫框架 (1)
- java解析js框架 (1)
- 产品经理 (1)
- java多分页 (1)
- 分页算法常见写法 (1)
- CompletableFuture allOf 获取结果 (1)
- CompletableFuture集合获取结果 (1)
- 如何通过python多线程抓取所有东方财富股票信息 (1)
- 最新东方财富股票抓包 (1)
- Collector和Collectors (1)
- Optional用法 (1)
- 全文搜索引擎 (1)
- 一个小时学会Git (1)
- SQL截取isnull stuff (1)
- idea激活3.4 (0)
- idea 2018.2.5注册 (1)
- HttpCanary抓包 (1)
- Double取消科学计数法 (1)
- 泛微E9查询 (0)
- 禅道讲解 (1)
- ScriptObjectMirror 转date (1)
- mysql加行号 (1)
- git一天学会 (1)
- kline画线 (1)
- thymeleaf接收和js (1)
- 对一个元素 同时添加单击onclick 和 双击ondblclick 触发冲突的解决 (1)
- mybatis generate (1)
- localdate转换string (1)
- MySQL 查询树结构 (1)
- 树层级关系 (1)
- java.lang.IllegalArgumentException: Comparison method violates its general contract! (1)
- Sql 行转列 STUFF for xml path (1)
- 不足前面补0 (1)
- GROUP_CONCAT replace concat (1)
- SQL插入数据 (1)
- fillstyle fillrect 渐变 (1)
- easyexcel excel操作 (1)
- 分时成交 JS.index (1)
- JS兼容 键盘 KEY (1)
- JS获取URL参数 (1)
- 油猴插件 (1)
- N_m3u8DL-CLI m3u8合并器 (1)
- 截图工具FSCapture90 (1)
- fidder无法上网设置 (1)
- 打印小票 图片 (1)
- jacob SpeechSDK转换语音 (1)
- 原型图 (1)
- charindex text转varchar (0)
- PATINDEX charindex text转varchar (1)
- ehcache3 stillAvailableAfterRestart (1)
- 扫码点餐 打印机 (0)
- 扫码点餐 打印机 速盘 (0)
- 扫码点餐 打印机 速盘 捷微 微擎 宝塔面板 (0)
- Seata简介(附带与其他分布式事务解决方案对比) (1)
- 看云 文档 (1)
- 飞鹅、365打印、易联云等打印机厂商 (0)
- 爬取西刺代理网站,获取免费的代理IP (0)
- [iOS 分享] 抓包一时爽,一直抓包一直爽!使用httpcatcher白嫖指尖时光vip会员…… [复制链接] (0)
- 冰点文库下载器 (0)
- 扫码点餐 (1)
- autojs (1)
- VS code设置自动化 (1)
- autojs 抖音自动点赞 (1)
- 冰点文库下载器 速盘 (1)
- 微信支付IJpay (1)
- 小程序uniapp (1)
- 代码生成器 (2)
- idm和迅雷 (1)
- 扫码点餐 - 小程序 (1)
- 电商架构 (1)
- natapp 微信对接 (1)
- 数据采集-同花顺 (1)
- 微信支付 (1)
- logstash日志系统 (1)
- 后端框架搭建 (1)
- mall-swarm搭建 (1)
- VUE .和@区别 (1)
- 如何正确的在项目中接入微信JS-SDK (1)
- idea代码提示 Codota (1)
- 公众号测试平台 (0)
- ngrok和natapp外网映射 (0)
- 公众号测试平台 uni-app (1)
- ngrok和natapp外网映射 node安装node-sass失败,配置淘宝源 (1)
- VScode保持vue语法高亮的方式 vetur (1)
- https://www.easyicon.net/ (1)
- 如何快速定位查询某个特定内容在数据库哪个表哪个字段中 (1)
- 在notepad++每行首尾添加字符 (1)
- 项目开源 (0)
- 项目开源 代码生成器 (1)
- mybatis自增长2种 (1)
- JSON (1)
- 名言语句接口 (1)
- git搭建 (2)
- PYthon爬虫图片 (1)
- springcloud自动化代码 (1)
- MYbatis-plus操作 (1)
- IDEA 忽略target目录 (1)
- dt -hT linux (1)
- rabbitmq安装 (0)
- rabbitmq安装及说明 (1)
- Elasticsearch (1)
- springcoud (1)
- 项目收集 (1)
- ApiPost 接口文档 (0)
- 推荐Apifox (0)
- apizza 和 apipost接口文档 (0)
- 推荐apidoc (1)
- Apifox (1)
- apizza 和 apipost (1)
- java图片识别 Tess4j (0)
- java图片识别 Tess4j Tesseract-OCR (1)
- springboot2.2.X手册:放弃fastdfs,整合Minio做文件服务器真香 (1)
- https://www.zye.cc/资源E站 (0)
- git使用 (1)
- Iframe+Cookie实现简单的单点登录 (1)
- gitlab安装 (1)
- Java带有验证码的模拟登陆 (1)
- spring security java笔记 semantic(前端) (0)
- spring security java笔记 semantic(前端) Docker安装 (1)
- ES6新特性 (1)
- 反爬虫 kk-anti-reptile (1)
- chrome下载 (1)
- 小区建设 (0)
- java 爬虫 (1)
- java 图像验证码EasyCaptcha (1)
- 代码自动生成 (1)
- java正则表达式 (1)
- 返回错误定义 (1)
- java获取随机码 (1)
- JWTutils (1)
- replace into (1)
- https://open.work.weixin.qq.com/devtool/query?e=40058 (1)
- vue生命周期 (1)
- semantic (1)
- hutool工具包 (1)
- IDEA run dashboard (1)
- nacos替代eureka (1)
- zookeeper consul (0)
- zookeeper consul nacos (1)
- mongodb (1)
- springcloud hystrix (1)
- IDEA 对应git操作 (1)
- 腾讯地图 (1)
- 获取同花顺的数据 (1)
- nginx配置 (4)
- base64 (1)
- 数据库加密 (1)
- IDEA GIT 操作 (1)
- swagger ui操作 (1)
- msyql8数据库操作 (1)
- 文档 看云 (1)
- 微服务实战 (1)
- 长连接查询 (1)
- py 交易 (0)
- MarkDown笔记 tyora (0)
- MarkDown笔记 typora (1)
- py学习 (1)
- PY获取句柄 (1)
- springcloud 解释 (1)
- mysql ON DUPLICATE KEY (1)
- 双链科技 (1)
- 项目扫码点餐 (0)
- 项目自动生成 (1)
- elasticsearch-7.8.0一闪而过 (1)
- axure for chrome (1)
- 在线ER模型 (1)
- 建表mysql (0)
- mysql新增 自增列 (1)
- java 自动生成controller (1)
- java 自动生成service 及实现类 (1)
- mysql8 数据库时间差8小时 (1)
- idea mybatis插件 提升工作效率 (1)
- mybatis 接收requestBody (0)
- springmvc接收复杂对象 (0)
- mybatis 批量更新 (1)
- 转换为int tinyInt1isBit=false (1)
- stream写法 (1)
- AccessibilityService (1)
- Collectors.summingInt(x->x) (1)
- Mybatis高级查询 (1)
- easyExcel (2)
- stream对象转换 (1)
- swagger-ui注释 (1)
- @JsonInclude(JsonInclude.Include.NON_NULL) (1)
- Mybatis代码自动生成工具,生成批量插入和批量更新方法 (1)
- soap-webservice-demo (1)
- SpringBoot(16)—@ConditionalOnBean与@ConditionalOnClass (1)
- android studio 打包app (1)
- CollectionBeanUtils.copyListProperties (1)
- mybatis idea 自动生成 (1)
- nginx代理 (0)
- mybatis查找的结果集对象中包含对象和集合的用法 (1)
- git填坑日志(2)——git stash与git commit的区别 (1)
- Spring MVC数据绑定大全 (1)
- SpringMVC/Boot中的校验框架 @Valid 和 @Validated的使用 (1)
- mybatis criteria or写法 (1)
- idea插件 (1)
- MyBatisCodeHelper-Pro插件破解版[2.8.2] (0)
- mybatis 一对多collection结合分页、查询条件问题解决 (1)
- OPtional妙用 (1)
- JAVA8之妙用Optional解决判断Null为空的问题 (1)
- 使用Proxifier+Fiddler对PC客户端进行抓包 (1)
- Java中https请求报错 (1)
- 信任所有ssl证书。解决SSLHandshakeException (1)
- HttpURLConnection中使用Cookie (1)
- Java日期格式2019-11-05T00:00:00转换标准日期 (1)
- 分组Collectors.groupingBy(Function.identity() (1)
- Collectors.counting() (1)
- idea插件大全 (1)
- 前端请求后端数据,后端返回前端的值如果为Null的几种处理方式 (1)
- RoundingMode 参数详解 (1)
- easyexcel 添加下拉框 (1)
- JSONObject.toJSONString 顺序一致,空添加问题解决 (1)
- Lombok添加@AllArgsConstructor后报错“错误:找不到符号 符号:类 ConstructorProperties ” (1)
- AndroidStudio Gradle构建项目报错:Error:The first result from the daemon was empty (1)
- 认识sqltoy-orm 比mybatis更强大 (1)
- stream java.util.NoSuchElementException: No value present (1)
- Microsoft Visual C++ 2019 Redistributable Package (x64) (1)
- mysql8安装 (1)
- mysql 清空数据库 (1)
- Mysql8数据库导到Mysql5数据库,报错Unknown collation: 'utf8mb4_0900_ai_ci' (1)
- DEFAULT CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP (1)
- enum写法 (1)
- List排序区别 (1)
- 如何在运行jar指定使用的JDK (1)
- Windows server 2012服务器访问速度慢的处理方法 (1)
- double类型如何去掉多余的零 (1)
- uni-app npm方法安装使用 (1)
- 由前端登录验证,页面跳转,携带headers token引发的思考和尝试 (1)
- Java的任务调度,使用Cron表达式实现 (1)
- springboot security 自定义 AuthenticationEntryPoint 和 AccessDeineHandler (1)
- Java基础系列-Collector和Collectors (1)
- mybatis collection 多列 (1)
- mysql 的split函数 (1)
- java8笔记: sorted()之正序倒序 (1)
- java 小数点后几位 ++ 数组和list排序 (1)
- nginx代理配置 (0)
- mysql sql语法 (1)
- mysql 查看慢sql 然后kill (1)
- nginx代理配置 Nginx反向代理解决前后端联调跨域问题 (1)
- nginx跨域 (0)
- Java使用多线程处理任务等待任务全部执行 (0)
- 批处理 (0)
- springboot null转 空‘’ (1)
- Spring Boot 完整讲解 (1)
- python3.8 chm springboot (1)
- java多线程并发系列之闭锁(Latch)和栅栏(CyclicBarrier) (1)
- mybatis 循环 (0)
- 日期匹配 (1)
- Navicat注册机报错No all pattern found! file already patched (0)
- GROUP_CONCAT(CONCAT_WS('_' (0)
- t1.`type` (0)
- t1.remain)) AS typeRemain (0)
- 记一次webservice的超时时间设置 (1)
- MapStruct快速上手 (1)
- fastadmin (1)
- java知识学习 (1)
- springboot集成redis (1)
- springboot动态加载定时任务 (1)
- 玩转 SpringBoot2.x 之整合 thumbnailator 图片处理 (1)
- mysql定时备份 (1)
- idea破解 (0)
- idea 破解 (0)
- 2020最新版idea的RunDashboard怎么显示出来 (0)
- Jsoup执行post方法调用接口 (1)
- 忘记gitlab管理员密码 (1)
- Call (1)
- GSON转化 (1)
- 金蝶登录 (1)
- 微服务入门 (1)
- TreeMap倒序排序 (1)
- pom中更换阿里云仓库时不要忽略了pluginRepositories (1)
- 说说API的防重放机制 重复调用问题 (1)
- HttpUtil.postJson企业微信 (1)
- linux 发布微服务 (1)
- systemctl restart xxx.service (0)
- nohup java -jar xxx-SNAPSHOT.jar >> log.log 2>&1 & (0)
- 前后端字段显示不一致解决方案 (1)
- 统一异常/接口参数验证 (1)
- springboot Validated和valid区别 (1)
- springboot代码规范 (1)
- redisson (1)
- 单点登录 (0)
- 代码优化 (0)
- rabbitmq熟悉 (0)
- 金蝶对接 (0)
- 金蝶标准接口 (0)
- sso单点登录 (1)
- 优秀项目 (1)
- 金蝶eos登录 (1)
- wss协议分析 (1)
- 火币开发人员 (1)
- js调试 (1)
- 抓取火币数据 (2)
- js pako.js解码 (1)
- 火币研究 (0)
- 数据源配置 (0)
- 特殊字符转义 (1)
- 数据源配置Asia/Shanghai和GMT%2B8区别 (1)
- ClientException: Load balancer does not have available server for cli (1)
- swagger-ui配置 (1)
- springboot feign (1)
- websocket (1)
- 软件开发文档 (1)
- 自动生成数据库表设计(四)之自定义模板 (1)
- 积木报表 (1)
- SpringCloud-Tools (1)
- 【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计+JSON查询 (1)
- ai自动生成代码 (0)
- ai自动生成代码 codota (1)
- 前端后台项目 (1)
- 微信券对接 (1)
- springcloud学习资料 (1)
- mybatis collection 多个列 (1)
- vue前端项目 (1)
- mysql规范 (1)
- 微信开发 (1)
- mybatis selectKey (1)
- easypoi实现1对多,easyexcel无法实现 (1)
- linux日志查看 (1)
- git日常操作 (1)
- 知识列表 (1)
- 常见网站 (0)
- 微信对接 (0)
- 源码大全 (0)
- 物业小区 源码下载 (1)
- nacos注册中心 (1)
- MYsql优化 (1)
- 微信支付签名工具 (1)
- js自減 怪用法 (1)
- 格式化日期+时区 (1)
- GSON使用笔记 排除 (0)
- GSON使用笔记 排除 @expose (1)
- excel自定义convert (1)
- excel导出 一对多 (1)
- easypoi技术文档 (1)
- SPRINGBOOT RESTTEMPLATE 请求工具类 (1)
- Spring 细节 (0)
- Spring 细节 + 事务回滚问题 (1)
- spring BindingResult errors验证 (0)
- spring BindingResult errors验证 + 日志拦截器 (1)
- 产品原型设计 (1)
- 接口文档编写 (1)
- PID查找端口 window (1)
- rabbitmq安装使用 (1)
- 文件上传spring.http.multipart.maxFileSize和spring.servlet.multipart.max-file-size区别 (1)
- BigDecimal的3个toString方法(toPlainString、toString、toEngineeringString) (1)
- list分组 (1)
- java8 lambda 统计list中对象的重复次数 (1)
- List按某个字段排序 (1)
- springboot 模拟测试文件上传 (1)
- FTpUtil (1)
- springboot测试 (1)
- mysql字符集 (1)
- hudiler打包ios (1)
- springboot整合thumbnailator实现图片压缩 (0)
- springboot压缩开启 (0)
- springboot压缩开启 feign报错 (1)
- nginx配置 不同域名指向同主机指向不同端口 (1)
- Thumbnailator 图片压缩 至指定大小 (1)
- vsftdpd安装 (1)
- gitlab安装及部署 (1)
- maven打包遇到错误 (1)
- springcloud资料 (1)
- Linux|Windows 网络协议 nginx|tomcat JAVA 数据库 CSS javascript Inno Setup windows通过netstat命令查看端口占用情况及PID (1)
- springboot 模板搭建 学习资料 (1)
- 【java】20分钟搞清log4j/logback/log4j2/slf4j || 如何统一日志标准 (1)
- json返回处理 (1)
- sql打印 (1)
- Feign报错feign.RetryableException: too many bytes written executing (1)
- java学习路线 (1)
- springboot 微人事 (1)
- jenkins 自动发包 (1)
- map多线程报错 (1)
- 给Mybatis-Plus插上小翅膀,支持多表查询 (0)
- windows版本运行jar (1)
- idea激活码 (0)
- springboot 经典开发资料 (1)
- 除去不必要的字段 (1)
- 为什么需要三张表之多对多表结构设计 (1)
- MyBatis多对多增删改查(不建关联实体) (1)
- @PreAuthorize("hasRole('ROLE_ADMIN')") (1)
- 几千次的重复提交,我用 SpringBoot+Redis 居然扛住了! (1)
- Mybatis逆向工程生成tinyint 转 Integer (1)
- nginx 配置 + window查看端口 (1)
- Spring Boot 返回 JSON 数据及数据封装null返回“”“” (1)
- vue限制输入数字或保留后两位的小数 (0)
最新评论
引用
转载:
[PHP]
本示例文档演示SQL SERVER,ORACLE下不同事务隔离级别的区别,以及两种数据库本身的特点
为了模拟并发环境,SQL SERVER在SMO程序中打开两个查询窗口即可。oracle可以用两个sql *plus程序连接到相同数据库来模拟
SQL SERVER、ORACLE中两个并发用户用事务1,事务2简称。
所有测试例子,都以最初测试表脚本运行后状态为基准。
在下列例子中,set transaction isolation level语句会改变会话的隔离级别,直到会话结束。故测试完毕需要改回默认级别。
最后,但并不是最不重要。以下的演示和相关解释,都是基于易于理解的原则来的,实际的情况可能更复杂,但对开发人员来说,理解如此程度的简化模型已经足够了。
测试表脚本:
SQL SERVER
CREATE TABLE [Customer](
[CustID] [int] NOT NULL,
[Fname] [nvarchar](20),
[Lname] [nvarchar](20),
[Address] [nvarchar](50),
[City] [nvarchar](20),
[State] [nchar](2) DEFAULT ('CA'),
[Zip] [nchar](5) NOT NULL,
[Phone] [nchar](10)
)
insert into customer values(1, 'Gary', 'Mckee', '111 Main', 'Palm Springs', 'CA', 94312, 7605551212)
insert into customer values(2, 'Tom', 'Smith', '609 Geogia', 'Fresno' 'JP', 33045, 5105551212)
insert into customer values(3, 'Jams', 'bond', 'ST Geogie 21', 'Washington', 'NY', 20331, 4405551864)
ORACLE
CREATE TABLE Customer(
CustID int NOT NULL,
Fname nvarchar2(20),
Lname nvarchar2(20),
Address nvarchar2(50),
City nvarchar2(20),
State nchar(2) DEFAULT 'CA',
Zip nchar(5) NOT NULL,
Phone nchar(10)
);
insert into customer values(1, 'Gary', 'Mckee', '111 Main', 'Palm Springs', 'CA', 94312, 7605551212);
insert into customer values(2, 'Tom', 'Smith', '609 Geogia', 'Fresno', 'JP', 33045, 5105551212);
insert into customer values(3, 'Jams', 'bond', 'ST Geogie 21', 'Washington', 'NY', 20331, 4405551864);
1。Sqlserver与oracle单条语句处理对比
SQL SERVER单条语句默认自动提交,即单条语句自动作为一个事务处理;而oracle的原则是尽量延后提交,除非遇到显式提交命令或者DDL语句。
SQL SERVER
打开事务1:
运行:select * from customer
可以看到表有3条记录
运行:insert into customer values(4, 'Hello', 'world', 'paradise road 01', 'heaven', 'XY', 00001, 1234564321)
转到事务2:
运行:select * from customer
可以看到事务1中刚插入的custid为4的记录。
ORACLE
打开事务1,运行:
select * from customer;
可以看到表有3条记录,运行:
insert into customer values(4, 'Hello', 'world', 'paradise road 01', 'heaven', 'XY', 00001, 1234564321);
转到事务2,运行:
select * from customer;
能看到的还是3条记录,事务1中刚插入的一条记录未自动提交,看不到。
转到事务1,运行:
commit;
转到事务2,运行:
select * from customer;
现在能看到4条记录了。
2. 丢失更新
Sqlserver完全兼容ANSI 92标准定义的4个隔离级别。它的默认隔离级别是提交读(read committed),在该级别下,可能会有丢失更新的问题。Oracle的默认情形也一样。故不再重复。
SQL SERVER
打开事务1运行:
set transaction isolation level read committed
begin tran
select * from customer --看到3条记录
现在切换到事务2,此时事务1还未结束。在事务2中运行:
set transaction isolation level read committed
begin tran
select * from customer --看到3条记录,和事务1中相同
现在假设事务1事务继续运行,修改数据并提交:
update customer set state = 'TK' where CustID = 3
commit
回到事务2,事务2根据先前查询到的结果修改数据:
update customer set Zip = 99999 where state = 'NY'
commit
结果因为事务1已经修改了事务2的where条件数据,事务2未成功修改数据(其实准确的说应该算是幻象读引起的更新失败。不过若满足条件的记录数多的话,事务2的update可能更新比预期的数量少的记录数,也可算“丢失”了部分本应完成的更新。个人认为只要明白实际上发生了什么即可,不必过分追究字眼)。丢失更新还可能有别的情形,比如事务2也是
update customer set state = 'KO' where CustID = 3
两个事务都结束后,事务2的结果反映到数据库中,但事务1的更新丢失了,事务2也不知道自己覆盖了事务1的更新。
3.脏读演示
sqlserver的默认隔离级别是提交读(read committed),当手工将其改为未提交读时,事务可以读取其它事务没提交的数据;oracle由于自身特殊实现机制,可以理解为自身基础的隔离级别就是可重复读(与ANSI标准还是有区别的,后面例子会说明)。
SQL SERVER
打开事务1,运行:
begin tran
select * from customer
update customer set state = 'TN' where CustID = 3
转到事务2,运行:
set transaction isolation level read uncommitted
begin tran
select * from customer
此时看到的数据是事务1已经更新但还未提交的(3号记录state值TN)。而如果事务1发觉数据处理有误,转到事务1,进行回滚:
Rollback
此时事务2如根据刚读取的数据进一步处理,会造成错误。它读取的数据并未更新到数据库,是“脏”的。
ORACLE
ANSI定义未提交读(read uncommitted)级别本意不是为了故意引入错误,而是提供一种可能的最大并发程度级别,即一个事务的数据更新不影响其它事务的读取。Oracle从内核层面实现了更新数据不阻塞读。可以说它提供未提交读级别的兼容,但没有脏读问题。(详情参考对应PPT文档)故oracle没有手工设置read uncommitted级别的语句。
4.不可重复读
Sql server的默认级别没有脏读问题,但存在不可重复读问题。Oracle默认级别也是提交读,不过它因为自身特殊机制,在语句一级不存在不可重复读问题。也就是说当运行时间较长的查询时,查询结果是与查询开始时刻一致的(即使查询过程中其它事务修改了要查询的数据),而SQL SERVER就存在问题(sql server 2005新特性提供了可选的语句一级一致性支持,叫做行版本机制,实际上可以说是照着oracle的多版本来的,大体原理差不多)。
由于语句一级的事务一致性难以演示,下面例子是事务一级,提交读隔离级别下发生的不可重复读现象:
SQL SERVER
打开事务1,运行:
set transaction isolation level read committed
begin tran
select * from customer where State = 'CA'
可以得到1条记录,这个时候事务2中运行:
set transaction isolation level read committed
begin tran
update Customer set state = 'JP' where state = 'CA'
commit
事务2插入一条记录并提交。回到事务1,事务1继续运行,此时它再次相同的查询,并借此作进一步修改,却发现读取到的数据发生了变化。
select * from customer where State = 'CA'
--2次读取不一致,之后的数据处理应该取消。否则不正确
update Customer set city = 'garden' where state = 'CA'
commit
读取未能获得记录。也就是说在同一事务中两次相同的查询获得了不同的结果,产生读取不可重复现象。
ORACLE
尽管oracle在默认隔离级别下提供了语句级的事务读一致性,但在事务级仍然是会出现不可重复读现象。和sql server一样,故不再重复。
5.幻像读
当sqlserver的隔离级别设置为可重复读(repeatable read),可以解决上面例子出现的问题。其内部是通过事务期间保持读锁来实现的。
SQL SERVER
开始事务1,修改事务级别为可重复读,执行:
set transaction isolation level repeatable read
begin tran
select * from customer where State = 'CA'
和上例一样得到1条记录,这个时候事务2中运行:
set transaction isolation level repeatable read
begin tran
update Customer set state = 'JP' where state = 'CA'
commit
会发现事务2一直等待,并不结束。返回事务1,运行:
select * from customer where State = 'CA' --2次读取结果一致
update Customer set city = 'garden' where state = 'CA'
commit
事务2成功结束后,再返回事务1,发现事务1也完成了。通过锁机制阻塞其它事务的修改,保持了事务期间读取的一致性。然而,如果是插入数据,则还是会出现问题:
开始事务1,修改事务级别为可重复读,执行:
set transaction isolation level repeatable read
begin tran
select * from customer where State = 'CA'
得到1条记录,这个时候事务2中运行:
set transaction isolation level repeatable read
begin tran
insert into customer values(4, 'hellow', 'world', 'paradise 001', 'garden', 'CA', 00000, 1119995555)
commit
发现事务2立刻提交并正常结束了。返回事务1,运行:
select * from customer where State = 'CA'
会发现得到了2条记录。这种现象就叫做幻像读。
ORACLE
由于自身特殊的机制,oracle没有提供一致读隔离级别的选项,想要获得一致读的效果,实际上需要将事务提升到串行化等级,即serializable。
6.串行化级别不同数据库实现
在这个级别,可以认为事务中的数据无论何时都是一致的,此级别使它显得好像没有其它用户在修改数据,数据库在事务开始时候被“冻结”(至少,对于本事务涉及的数据如此)。然而在不同数据库中,其实现机制也不同。
SQL SERVER
开始事务1,运行:
set transaction isolation level serializable
begin tran
select * from customer where State = 'CA'
会得到1条记录,这时事务2开始运行:
set transaction isolation level serializable
begin tran
insert into customer values(4, 'hellow', 'world', 'paradise 001', 'garden', 'CA', 00000, 1119995555)
commit
会发现事务2挂起,它在等待事务1结束。回到事务1,继续:
select * from customer where State = 'CA'
update Customer set city = 'garden' where state = 'CA'
commit
在片刻的等待以后,事务1得到类似以以下格式消息:
消息1205,级别13,状态56,第1 行
事务(进程ID 51)与另一个进程被死锁在锁资源上,并且已被选作死锁牺牲品。请重新运行该事务。
而事务2更新了数据并正常结束。这是因为两个事务都设置成了串行化级别,当遇到冲突时候,sql server根据一定的规则选择牺牲掉其中一个事务,来保证事务的串行性。上面的例子,如果将事务2的隔离级别改为提交读,那么事务2会等待事务1完成,之后自己正常完成(因为事务2没有串行需求,不会有死锁)。
ORACLE
在oracle中,通过多版本,可以在一定程度上避免死锁。
开始事务1,运行:
set transaction isolation level serializable;
select * from customer where State = 'CA'; --set tran语句隐式开始事务
得到1条记录,然后事务2开始运行:
set transaction isolation level serializable;
insert into customer values(4, 'hellow', 'world', 'paradise 001', 'garden', 'CA', 00000, 1119995555);
commit;
可以发现事务2立刻完成,没有阻塞。回到事务1继续:
select * from customer where State = 'CA';
update Customer set city = 'garden' where state = 'CA';
commit;
事务1中的第二次查询和事务开始时刻一致,就好像事务2已经完成的提交不存在。事务最终正常更新完毕,并保持了“事务开始”时刻的数据一致性。
然而,如果事务1,2修改同样的数据行,也会有错误,
开始事务1,运行:
set transaction isolation level serializable;
select * from customer where State = 'CA'; --set tran语句隐式开始事务
得到1条记录,然后事务2开始运行:
set transaction isolation level serializable;
update customer set state = 'KO' where state = 'CA';
commit;
可以发现事务2立刻完成,没有阻塞。回到事务1继续:
select * from customer where State = 'CA';
update Customer set city = 'garden' where state = 'CA';
commit;
出现错误信息:
第 1 行出现错误:
ORA-08177: 无法连续访问此事务处理
总的来说,oracle利用多版本的方式实现串行化级别更少造成死锁,除非两个事务修改了相同的数据行,一般也不会造成冲突。
7.不同隔离级别的相互影响
前面的例子基本都是两个相同隔离级别事务的情况。如果不同隔离级别的事务发生冲突,会有什么不同吗?实际上,对于一个事务来说,其它事务的隔离级别对它来说是未知的,更进一步,甚至数据库中有没有其它事务,有多少事务也不知道。影响事务访问数据就两方面因素:该事务自身的隔离级别,该事务要访问的数据上面锁的状态。
SQL SERVER
开始事务1,运行:
set transaction isolation level serializable
begin tran
select * from customer where State = 'CA'
事务1的查询获得1条记录,转到事务2,运行:
set transaction isolation level read uncommitted
begin tran
select * from customer
事务2查询获得3条记录,回到事务1,运行:
update Customer set city = 'garden' where state = 'CA'
切换到事务2,运行:
select * from customer
update customer set state = 'KO' where state = 'CA'
commit;
因为事务2隔离级别为未提交读,因此事务1中刚作的修改可以立刻从查询看到,即使事务1还未结束。进一步的update因为事务1对记录加了独占锁,因此事务2挂起。回到事务1将其提交:
Commit
事务1正常结束,独占锁释放,从而让事务2得以继续修改数据,并最终完成。
ORACLE
Oracle数据库的隔离级别设置语句只有read committed和serializable(read only暂不讨论),加上其特殊锁机制,不同隔离级别事务间的影响除了上例(例6)中两个都为serializable的情况,其它都可视为互不阻塞。
8.页锁与行锁(限sql server)
Sql server的锁可以到行一级。然而它又存在自动的锁定扩大,锁定转换。因此存在一些意想不到的情况。下面是演示:
开始事务1,运行:
set transaction isolation level read committed
begin tran
select * from customer where State = 'CA'
update Customer set city = 'garden' where state = 'CA'
理论上来说,在提交读级别下,上面的update语句只是在state值为CA的数据行上加了独占锁,表中其它数据应该可以被其它事务更新,然而,如下事务2开始:
set transaction isolation level read committed
begin tran
select * from customer
update customer set state = 'KO' where state = 'JP'
commit
发现事务2陷入阻塞状态。尽管它们更新的不是同一条记录。回到事务1,运行:
Commit
事务1结束后事务2才继续运行至结束。
如果我们在表上加入索引,如下:
CREATE NONCLUSTERED INDEX [idx_state] ON [dbo].[Customer] ( [State])
再重复上面的步骤,会发现阻塞不再存在。
PS:这种现象应该和数据库默认加锁参数/机制有关,应该可以调整,但目前手中没有进一步资料。故仅罗列了现象。
ORACLE
Oracle在数据一级只有一种数据行上的锁,因此不存在sql server中这些问题。
9.Set transaction语句的作用周期
前面所有的例子,都是在会话窗口中进行的演示。一旦使用了set transaction语句,会影响整个会话。除非再显式改变隔离级别,否则将保持到会话结束。例如:
开始事务1,假设会话一开始处于SQL SERVER的默认隔离级别(read committed):
begin tran
select * from customer where State = 'CA'
select * from sys.dm_tran_locks
系统视图sys.dm_tran_locks可以查看当前的加锁情况,到目前位置,只有数据库级的锁。继续运行:
set transaction isolation level repeatable read
select * from customer where State = 'CA'
select * from sys.dm_tran_locks
commit
接下来的语句改变了隔离级别到可重复读,接下来的查询,会看到行级锁的记录。在上面事务提交后,运行:
begin tran
select * from customer where State = 'CA'
select * from sys.dm_tran_locks
commit
仍然会从视图sys.dm_tran_locks看到行级锁记录。整个会话期间都受到影响。
但是,如果调用存储过程,函数,则过程/函数中事务隔离级别的改变并不会对调用环境造成影响。可以通过以下例子说明,首先,创建一个存储过程脚本:
CREATE PROCEDURE [dbo].[test_tran_level]
AS
BEGIN
BEGIN TRAN
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
SELECT * FROM CUSTOMER
UPDATE CUSTOMER SET STATE = 'SS' WHERE CustID = 3
SELECT * FROM sys.dm_tran_locks
COMMIT
END
然后,在会话窗口调用该过程,会话窗口当前隔离级别为默认的提交读:
Exec test_tran_level
运行的结果可以看到读取锁信息,再在会话中运行:
begin tran
select * from customer where State = 'CA'
select * from sys.dm_tran_locks
commit
视图sys.dm_tran_locks并未有读锁的记录,说明事务隔离级别仍然是提交读。
相关推荐
在事务并发处理中,存在三种类型的问题:脏读、不可重复读和虚读。 脏读(Dirty Read)是指事务读取了另一个事务未提交的数据。如果第一个事务回滚了修改操作,那么第二个事务读取的数据就可以看作是从未存在过的。...
脏读、不可重复读和幻读都是在事务隔离性不足的情况下可能出现的问题。 1. **脏读**(Dirty Read): - **定义**:当一个事务正在访问数据,并对该数据进行了修改,但这种修改还没有提交到数据库中时,另一个事务...
并发控制的主要目标是避免事务之间的冲突,防止出现诸如脏读、不可重复读和幻读等问题。 脏读发生在事务T1读取了事务T2还未提交的修改数据,然后T2因为某种原因回滚了更改。在这种情况下,T1读到的数据实际上是错误...
该资源详细介绍了MySQL数据库中的事务隔离级别,包括读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable),并讨论了这些级别如何影响脏读、不可重复读...
1. 读未提交(Read Uncommitted):允许读取未提交的数据,可能导致脏读、不可重复读、幻读。 2. 读提交(Read Committed):仅能读取已提交的数据,避免脏读,但仍可能遇到不可重复读和幻读。 3. 可重复读...
4. **串行化**:最高级别的隔离,完全避免了脏读、不可重复读和幻读,但代价是性能降低,因为所有事务都按照序列执行。 为了解决不可重复读问题,数据库管理系统通常会采用锁定策略或者多版本并发控制(MVCC, Multi...
要深入理解不可重复读,我们需要先回顾脏读(Dirty Read)和脏写(Dirty Write)两个概念。脏读是指一个事务读取了另一个事务未提交的数据。如果后一个事务回滚了,那么前一个事务读到的数据就是无效的,这种现象在...
在这种级别下,每次查询都会获取当前的数据库状态,所以可以防止脏读,但不能防止不可重复读和幻读。Oracle 数据库默认采用的就是这个隔离级别。在 MySQL 中,如果我们把两个连接的事务隔离级别都设置为提交读,那么...
数据库的脏读、不可重复读、幻读都和事务的隔离性有关。所以先了解一下事务的4大特性。 事务的4大特性(ACID): 1、原子性(Atomicity):事务是数据库的逻辑工作单位,它对数据库的修改要么全部执行,要么...
1. 读未提交(Read Uncommitted):最低的隔离级别,允许事务读取未提交更改的数据,这意味着可能会遇到脏读、不可重复读和幻读问题。 2. 读已提交(Read Committed):保证一个事务只能读取已经提交的数据。在这个...
尤其是当多个事务并发执行时,可能会遇到一系列的问题,其中就包括脏读、不可重复读和幻读。理解这些问题并知道如何避免它们对于编写健壮的数据库应用程序至关重要。 首先,让我们定义一下这三种问题的含义: 1. ...
MySQL的可重复读(Repeatable Read)隔离级别是其事务管理机制的一部分,旨在解决数据库并发操作中的一些问题,如脏读、不可重复读和幻读。然而,标题中提出的问题在于,可重复读隔离级别是否能完全防止幻读。在这个...
2. 读已提交(Read Committed):在这个级别,一个事务只能读取其他事务已经提交的数据,避免了脏读,但仍然可能存在不可重复读和幻读。 3. 可重复读(Repeatable Read):这个级别防止了脏读和不可重复读,但在...
这是MySQL InnoDB默认的事务隔离级别,它可以防止不可重复读的问题。 然而,可重复读并不能完全阻止幻读。幻读是指在一个事务中,两次执行相同的查询,但因为其他事务在这期间插入了满足查询条件的新行,导致第二次...
5. ISOLATION_SERIALIZABLE:这是最高的隔离级别,完全服从 ACID 原则,可以避免脏读、不可重复读和幻像读。 在使用 Spring 声明式事务时,我们需要了解这些事务隔离级别的特点和使用场景,以便更好地使用 Spring ...
事务并发问题通常包括脏读、不可重复读和幻读。 一、事务的基本要素(ACID) 事务具有四个基本要素,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),这四个要素是事务...
MySQL默认的事务隔离级别是可重复读,它能防止脏读和不可重复读。在这个级别下,事务在整个事务期间可以看到一致的数据视图,即同一查询始终返回相同的结果,除非事务自己对数据进行了修改。然而,幻读问题依然存在...
- 可重复读(Repeatable Read):确保一个事务中多次读取同一数据时,其结果是一致的,防止了脏读和不可重复读,但是幻读仍可能发生。 - 可串行化(Serializable):最高的隔离级别,它通过强制事务串行执行,避免了...
这个例子展示了“读提交”级别如何防止脏读,即一个事务读到了另一个事务未提交的修改。然而,它并未解决不可重复读和幻读问题。不可重复读是指在一个事务内,多次读取同一数据集时,结果不同,因为其他事务在此期间...