MySql的事务隔离级别的详细介绍(附代码)

本篇文章给大家带来的内容是关于MySql的事务隔离级别的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、事务的四大特性(ACID)

了解事务隔离级别之前不得不了解的事务的四大特性。

1、原子性(Atomicity)

事务开始后所有操作,要么全部做完,要么全部不做。事务是一个不可分割的整体。事务在执行过程中出错,会回滚到事务开始之前的状态,以此来保证事务的完整性。类似于原子在物理上的解释:指化学反应不可再分的基本微粒,原子在化学反应中不可分割 。

2、一致性(Consistency)

事务在开始和结束后,能保证数据库完整性约束的正确性即数据的完整性。比如经典的转账案例,A向B转账,我们必须保证A扣了钱,B一定能收到钱。个人理解类似于物理上的能量守恒。

3、隔离性(Isolation)

事务之间的完全隔离。比如A向一张银行卡转账,避免在同一时间过多的操作导致账户金额的缺损,所以在A转入结束之前是不允许其他针对此卡的操作的。

4、持久性(Durability)

事务的对数据的影响是永久性的。通俗的解释为事务完成后,对数据的操作都要进行落盘(持久化)。事务一旦完成就是不可逆的,在数据库的操作上表现为事务一旦完成就是无法回滚的。

二、事务并发问题

在互联网的大潮中,程序存在的价值早已不是在传统行业中为了帮人们解决一些复杂的业务逻辑。用户体验至上的互联网时代,代码就像西二旗地铁站码农的脚步一样,速度、速度、还是速度。当然也不能坐错了方向,本来想去西直门最后到了东直门(暂且理解为正确性吧)。相对于传统行业复杂的业务逻辑,互联网更注重并发带给程序的速度与激情。当然超速也是有代价的。在并发事务中,一不小心可怜的码农就要跑路了。

1、脏读

又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。

例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Rollback了,那么事务T2读取的就是脏数据。

2、不可重复读

同一个事务中,多次读出的同一数据是不一致的。

例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。

3、幻读

不好表述直接上例子吧:

在仓库管理中,管理员要给刚到的一批商品进入库管理,当然入库之前肯定是要查一下之前有没有入库记录,确保正确性。管理员A确保库中不存在该商品之后给该商品进行入库操作,假如这时管理员B因为手快将已将该商品进行了入库操作。这时管理员A发现该商品已经在库中。就像刚刚发生了幻读一样,本来不存在的东西,突然之间他就有了。

注:三种问题看似不太好理解,脏读侧重的是数据的正确性。不可重复度侧重的于对数据的修改,幻读侧重于数据的新增和删除。

三、MySql四种事务隔离级别

上一章节了解了高并发下对事务的影响。事务的四种隔离级别就是对以上三种问题的解决方案。

隔离级别脏读       不可重复度幻读     读未提交(read-uncommitted)是是是不可重复读(read-committed)否是是可重复读(repeatable-read)否否是可串行化(serializable)否否否

四、sql演示四种隔离级别

mysql版本:5.6

存储引擎:InnoDB

工具:navicat

建表语句:

CREATE TABLE `tb_bank` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(16) COLLATE utf8_bin DEFAULT NULL,  `account` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;INSERT INTO `demo`.`tb_bank`(`id`, `name`, `account`) VALUES (1, '小明', 1000);

1、通过sql演示——read-uncommitted的脏读

(2)read-uncommit导致的脏读

所谓脏读就是说,两个事务,其中一个事务能读取到另一个事务未提交的数据。
场景:session1要转出200元,session2转入100元。基数为1000。顺利完成正确的结果应该是900元。但是我们假设session2转入因为某种原因事务回滚。这时正确的结果应该是800元。

演示步骤:
① 新建两个session(会话,在navicat中表现为两个查询窗口,在mysql命令行中也是两个窗口),分别执行

 select @@tx_isolation;//查询当前事务隔离级别 set session transaction isolation level read uncommitted;//将事务隔离级别设置为 读未提交

② 两个session都开启事务

 start transaction;//开启事务

③ session1和session2:证明两个操作执行前账户余额为1000

 select * from tb_bank where id=1;//查询结果为1000

④ session2:此时假设session2的更新先执行。

update tb_bank set account = account + 100 where id=1;

⑤ session1:在session2 commit之前session1开始执行。

 select * from tb_bank where id=1;//查询结果:1100

⑥ session2:因为某种原因,转入失败,事务回滚。

 rollback;//事务回滚 commit;//提交事务

⑦  这时session1开始转出,并且session1觉得⑤中查询结果1100就是正确的数据。

 update tb_bank set account=1100-200 where id=1; commit;

⑧ session1 和 session2查询结果

 select * from tb_bank where id=1;//查询结果:900

这时我们发现因为session1的脏读造成了最终数据不一致。正确的结果应该为800;
到此我们怎么避免脏读呢,将事务的隔离性增加一个级别到read-commit

(2)read-commit解决脏读

重置数据,使数据恢复到account=1000

① 新建两个session,分别设置

 set session transaction isolation level read committed;//将隔离级别设置为 不可重复读

重复执行(1)中的②③④步

 ⑤ session1执行查询

 select * from tb_bank where id=1;//查询结果为1000,这说明 不可重复读 隔离级别有效的隔离了两个会话的事务。

这时我们发现,将事务的隔离升级为read-committed;后有效的隔离了两个事务,使得session1中的事务无法查询到session2中事务对数据的改动。有效的避免了脏读。

 2、通过sql演示—–read-committed的不可重复读

(1)read-commit的不可重复读

重置数据,使数据恢复到account=1000

所谓的不可重复读就是说,一个事务不能读取到另一个未提交的事务的数据,但是可以读取到提交后的数据。这个时候就造成了两次读取的结果不一致了。所以说是不可重复读。
READ COMMITTED 隔离级别下,每次读取都会重新生成一个快照,所以每次快照都是最新的,也因此事务中每次SELECT也可以看到其它已commit事务所作的更改
场景:session1进行账户的查询,session2进行账户的转入100。
session1开启事务准备对账户进行查询然后更新,这时session2也对该账户开启了事务进行更新。正确的结果应该是在session1开启事务以后查询读到的结果应该是一样的。

① 新建两个session,分别设置

 set session transaction isolation level read committed;

② session1和session2分别开启事务

 start transaction;

③ session1第一次查询:

 select * from tb_bank where id=1;//查询结果:1000

④ session2进行更新:

 update tb_bank set account = account+100 where id=1; select * from tb_bank where id=1;//查询结果:1100

⑤ session1第二次查询:

 select * from tb_bank where id=1;//查询结果:1100。和③中查询结果对比,session1两次查询结果不一致。

查看查询结果可知,session1在开启事务期间发生重复读结果不一致,所以可以看到read commit事务隔离级别是不可重复读的。显然这种结果不是我们想要的。

Python操作Mysql实例代码教程 Python操作Mysql实例代码教程

本文介绍了Python操作MYSQL、执行SQL语句、获取结果集、遍历结果集、取得某个字段、获取表字段名、将图片插入数据库、执行事务等各种代码实例和详细介绍,代码居多,是一桌丰盛唯美的代码大餐。如果想查看在线版请访问:https://www.jb51.net/article/34102.htm

Python操作Mysql实例代码教程 0 查看详情 Python操作Mysql实例代码教程

(2)repeatable-read可重复读

重置数据,使数据恢复到account=1000

① 新建两个session,分别设置

 set session transaction isolation level repeatable read;

重复(1)中的②③④
⑤ session1第二次查询:

 select * from tb_bank where id=1;//查询结果为:1000

从结果可知,repeatable-read的隔离级别下,多次读取结果是不受其他事务影响的。是可重复读的。到这里产生了一个疑问,那session1在读到的结果中依然是session2更新前的结果,那session1中继续转入100能得到正确的1200的结果吗?
继续操作:
⑥ session1转入100:

update tb_bank set account=account+100 where id=1;

到这里感觉自己被骗了,锁,锁,锁。session1的更新语句被阻塞了。只有session2中的update语句commit之后,session1中才能继续执行。session的执行结果是1200,这时发现session1并不是用1000+100计算的,因为可重复读的隔离级别下使用了MVCC机制,select操作不会更新版本号,是快照读(历史版本)。insert、update和delete会更新版本号,是当前读(当前版本)。

3、通过sql演示—–repeatable-read的幻读

在业务逻辑中,通常我们先获取数据库中的数据,然后在业务中判断该条件是否符合自己的业务逻辑,如果是的话,那么就可以插入一部分数据。但是mysql的快照读可能在这个过程中会产生意想不到的结果。
场景模拟:
session1开启事务,先查询有没有小张的账户信息,没有的话就插入一条。这是session2也执行和session1同样的操作。

准备工作:插入两条数据

 INSERT INTO `demo`.`tb_bank`(`id`, `name`, `account`) VALUES (2, '小红', 800); INSERT INTO `demo`.`tb_bank`(`id`, `name`, `account`) VALUES (3, '小磊', 6000);

(1)repeatable-read的幻读

① 新建两个session都执行

 set session transaction isolation level repeatable read; start transaction; select * from tb_bank;//查询结果:(这一步很重要,直接决定了快照生成的时间)

结果都是:

MySql的事务隔离级别的详细介绍(附代码)
② session2插入数据

 INSERT INTO `demo`.`tb_bank`(`id`, `name`, `account`) VALUES (4, '小张', 8000); select * from tb_bank;

MySql的事务隔离级别的详细介绍(附代码)

结果数据插入成功。此时session2提交事务

 commit;

③ session1进行插入
插入之前我们先看一下当前session1是否有id=4的数据

 select * from tb_bank;

MySql的事务隔离级别的详细介绍(附代码)

结果session1中没有该条记录,这时按照我们通常的业务逻辑,此时应该是能成功插入id=4的数据。继续执行:

 INSERT INTO `demo`.`tb_bank`(`id`, `name`, `account`) VALUES (4, '小张', 8000);

MySql的事务隔离级别的详细介绍(附代码)

结果插入失败,提示该条已经存在,但是我们查询里面并没有这一条数据啊。为什么会插入失败呢?

因为①中的select语句生成了快照,之后的读操作(未加读锁)都是进行的快照读,即在当前事务结束前,所有的读操作的结果都是第一次快照读产生的快照版本。疑问又来了,为什么②步骤中的select语句读到的不是快照版本呢?因为update语句会更新当前事务的快照版本。具体参阅第五章节。

(2)repeatable-read利用当前读解决幻读

重复(1)中的①②
③ session1进行插入
插入之前我们先看一下当前session1是否有id=4的数据

select * from tb_bank;

结果session1中没有该条记录,这时按照我们通常的业务逻辑,此时应该是能成功插入id=4的数据。

 select * from tb_bank lock in share mode;//采用当前读

结果:发现当前结果中已经有小张的账户信息了,按照业务逻辑,我们就不在继续执行插入操作了。
这时我们发现用当前读避免了repeatable-read隔离级别下的幻读现象。

4、serializable隔离级别

在此级别下我们就不再做serializable的避免幻读的sql演示了,毕竟是给整张表都加锁的。

五、当前读和快照读

本想把当前读和快照读单开一片博客,但是为了把幻读总结明白,暂且在本章节先简单解释下快照读和当前读。后期再追加一篇MVCC,next-key的博客吧。。。

1、快照读:即一致非锁定读。

① InnoDB存储引擎下,查询语句默认执行快照读。

② RR隔离级别下一个事务中的第一次读操作会产生数据的快照。

③ update,insert,delete操作会更新快照。

四种事务隔离级别下的快照读区别

① read-uncommitted和read-committed级别:每次读都会产生一个新的快照,每次读取的都是最新的,因此RC级别下select结果能看到其他事务对当前数据的修改,RU级别甚至能读取到其他未提交事务的数据。也因此这两个级别下数据是不可重复读的。

② repeatable-read级别:基于MVCC的并发控制,并发性能极高。第一次读会产生读数据快照,之后在当前事务中未发生快照更新的情况下,读操作都会和第一次读结果保持一致。快照产生于事务中,不同事务中的快照是完全隔离的。

③ serializable级别:从MVCC并发控制退化为基于锁的并发控制。不区别快照读与当前读,所有的读操作均为当前读,读加读锁 (S锁),写加写锁 (X锁)。Serializable隔离级别下,读写冲突,因此并发度急剧下降。(锁表,不建议使用)

2、当前读:即一致锁定读。

如何产生当前读

① select … lock in share mode

② select … for update

③ update,insert,delete操作都是当前读。

读取之后,还需要保证当前记录不能被其他并发事务修改,需要对当前记录加锁。①中对读取记录加S锁 (共享锁),②③X锁 (排它锁)。

3、疑问总结

① update,insert,delete操作为什么都是当前读?

简单来说,不执行当前读,数据的完整性约束就有可能遭到破坏。尤其在高并发的环境下。

分析update语句的执行步骤:update table set … where …;

InnoDB引擎首先进行where的查询,查询到的结果集从第一条开始执行当前读,然后执行update操作,然后当前读第二条数据,执行update操作……所以每次执行update都伴随着当前读。delete也是一样,毕竟要先查到该数据才能删除。insert有点不同,insert操作执行前需要执行唯一键的检查。【相关推荐:MySQL教程】

以上就是MySql的事务隔离级别的详细介绍(附代码)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1079645.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CSS中position:fixed遮挡滚动条怎么办?
上一篇 2025年12月2日 17:51:44
Go语言中嵌入结构体与ORM反射:实现通用CRUD操作的策略
下一篇 2025年12月2日 17:51:51

相关推荐

  • 抖音粉丝LV0到LV6等级要卖多少钱,2025年抖音粉丝最新价格参考

    抖音达人带货等级从lv0到lv6级,都需要卖多少钱?很多新手朋友都不清楚带货等级是如何划分的额,也不清楚每个等级都需要多少交易额,相匹配的抖音粉丝数量是多少,接下来小编会带领大家详细了解下抖音粉丝带货等级的区别和2025年抖音最新的价格参考明细: 一,抖音粉丝等级划分标注和对应粉丝数量: 1,LV0…

    2026年9月24日
    000
  • PHP 中如何将 JSON 数组值声明为变量

    本文介绍了如何在 PHP 中从数据库获取数据并将其编码为 JSON 格式,然后通过 AJAX 请求传递到另一个页面。重点讲解了如何在接收页面解析 JSON 数据,并将 JSON 数组中的特定值提取并赋值给变量,以便在后续的 PHP 函数中使用。 从数据库获取数据并编码为 JSON 首先,我们需要从数…

    2026年9月24日
    000
  • 如何列出DEB包内容 dpkg -L查看文件清单

    如何列出DEB包内容 dpkg -L查看文件清单如何列出DEB包内容 dpkg -L查看文件清单如何列出DEB包内容 dpkg -L查看文件清单如何列出DEB包内容 dpkg -L查看文件清单

    要查看已安装 deb 包所包含的文件列表,可使用命令 dpkg -l 包名,例如 dpkg -l nginx 会列出 nginx 安装的所有文件路径;该命令适用于 debian 及其衍生系统如 ubuntu,仅能查询已安装的包,且常用于查找配置文件、排查冲突或学习软件结构;为方便查看,可通过管道配合…

    2026年9月24日 用户投稿
    000
  • VSCode如何调试React前端应用 VSCode调试React组件的完整教程

    要调试react前端应用,首先需安装vscode的浏览器调试插件并配置launch.json文件,1. 安装“debugger for chrome”或对应浏览器的插件;2. 在项目根目录的.vscode文件夹中创建launch.json,配置type为chrome、request为launch、n…

    2026年9月24日
    100
  • Linux中如何安装Git工具_Linux安装Git工具的详细教程

    在Linux系统中安装Git工具是进行版本控制的第一步,尤其对于开发者来说非常关键。不同Linux发行版使用不同的包管理器,因此安装方式略有差异。下面将介绍在主流Linux系统中安装Git的详细步骤。 1. 在Ubuntu/Debian系统中安装Git Ubuntu和Debian系统使用apt作为包…

    2026年9月24日
    100
  • win11网络连接图标一直转圈显示正在识别怎么办_win11网络图标转圈解决方法

    重启网络服务、重置适配器、更改DNS及命令提示符重置网络组件可解决Windows 11网络图标转圈问题。 如果您在使用Windows 11时发现网络连接图标持续转圈,显示“正在识别”或无法正常获取网络连接状态,这通常意味着系统在尝试获取网络配置信息时遇到了阻碍。以下是多种可行的解决方法: 本文运行环…

    2026年9月24日
    100
  • 5118如何优化站内搜索排名_5118站内SEO的实用技巧

    5118是SEO辅助工具,通过挖掘长尾词、分析竞争对手和需求图谱来指导内容优化。利用其数据优化标题、布局关键词,并持续监控排名与流量,以数据驱动迭代策略,提升搜索引擎排名。 5118 不是直接优化你网站站内搜索排名的工具,它是一款专业的SEO辅助平台,核心功能是帮你挖掘关键词、分析数据,从而指导你进…

    2026年9月24日
    100
  • 抖音1000粉丝价格明细,认准官方巨量千川合作模式

    粉丝是我们开展抖音业务的入场券,更多的粉丝数量意味着更多的商业机会,粉丝数量也决定了我们在抖音生态中的主动权力,熟话说“短期靠爆文涨粉,中期靠人设留粉,长期靠价值变现”,按照平台的算法规则和流量分配机制,一定数量的粉丝基础,能保障我们账号基本推流,而抖音1000粉丝是一个分水岭,为了帮助大家更快速更…

    2026年9月24日
    100
  • gpt-realtime— OpenAI最新推出的语音模型

    gpt-realtime— OpenAI最新推出的语音模型gpt-realtime— OpenAI最新推出的语音模型gpt-realtime— OpenAI最新推出的语音模型gpt-realtime— OpenAI最新推出的语音模型

    ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ OpenAI Codex 可以生成十多种编程语言的工作代码,基于 OpenAI GPT-3 的自然语言处理模型 57 查看详情 gpt-realtime 是什么 gpt-realtime 是 o…

    2026年9月24日 用户投稿
    100
  • iPhone13ProMax微信收款语音无法设置怎么办?解决语音功能的教程

    iPhone13ProMax微信收款语音无法设置怎么办?解决语音功能的教程iPhone13ProMax微信收款语音无法设置怎么办?解决语音功能的教程iPhone13ProMax微信收款语音无法设置怎么办?解决语音功能的教程iPhone13ProMax微信收款语音无法设置怎么办?解决语音功能的教程

    iPhone 13 Pro Max微信收款语音无法设置,通常非硬件问题,而是微信或系统设置不当所致。2. 需检查微信内“收款到账语音提醒”是否开启,并确认系统通知权限、声音设置、静音模式、勿扰模式及网络连接正常。3. 可尝试重启手机、更新微信或iOS系统,必要时重置所有设置或重装微信。4. 若问题依…

    2026年9月24日 用户投稿
    200
  • VSCode如何通过Dev Containers开发 VSCode开发容器环境的搭建与使用

    vscode通过dev containers提供容器化开发环境,解决了“在我的机器上能运行”的问题。1. 安装docker并配置vscode访问;2. 安装remote – containers扩展;3. 创建.devcontainer文件夹和devcontainer.json文件;4.…

    2026年9月24日
    100
  • MACA: 一款自动注释细胞类型的工具

    前言 设计的初衷在目前的细胞类型鉴定工具中,支持向量机(SVM)的准确性超过了大多数监督注释方法。然而,由于监督注释方法在大多数单细胞数据中缺乏真实参照,因此其易用性不如非监督方法,这也是非监督方法占主流的原因之一。使用非监督方法时,需要人工介入,调整分群的分辨率,并提供标记基因,这会导致选择标记基…

    2026年9月24日
    000
  • 如何通过压力测试判断电源的峰值输出可靠性?

    答案是判断电源峰值输出可靠性需通过动态负载测试。使用可编程电子负载模拟瞬时功耗变化,配合高带宽示波器监测电压跌落、恢复时间与纹波噪声,同时用热成像仪评估关键元件温度,若在快速负载切换下电压稳定、纹波低、温升可控,则电源峰值性能可靠。 判断电源的峰值输出可靠性,说白了,就是看它在最极端、最苛刻的瞬间,…

    2026年9月24日
    300
  • 美图秀秀网页版登录入口 美图秀秀在线使用官网

    美图秀秀网页版登录入口为http://xiuxiu.web.meitu.com/,提供调色、美化、抠图、拼图、GIF制作等功能,支持在线编辑与素材模板使用。 美图秀秀网页版登录入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来美图秀秀网页版在线使用官网地址,以及其主要功能特点,感兴趣的网…

    2026年9月24日
    100
  • 别在做无用功了,抖音1000粉丝现在可以花钱涨了

    花钱买粉丝是不被允许的,是自欺欺人的吗?这种老观点在如今的抖音流量生态体系中已经不在适合,不管是从用户需求角度,还是从官方盈利视角出发,付费投流,花钱涨粉都是市场正常需求,也是关系到账号生存发展,如果我们尝试了很多自然流量的方式,粉丝数量还是迟迟上不去,那完全可以选择付费涨粉,这里可不是说让大家花钱…

    2026年9月24日
    100
  • VSCode如何分屏和布局管理 VSCode多窗口编辑的高效方式

    vscode多窗口编辑的快捷键和技巧包括:1. 垂直分屏使用 ctrl+(macos为 cmd+);2. 水平分屏使用 ctrl+k v(macos为 cmd+k v)或通过菜单选择上下拆分;3. 拖拽文件标签或从侧边栏拖文件至边缘可智能创建新分屏;4. 右键“在新组中打开”可快速并排查看文件;5.…

    2026年9月24日
    100
  • win10管理员账户被禁用了怎么办_win10管理员账户恢复教程

    1、通过计算机管理可直接启用禁用的管理员账户;2、使用命令提示符输入net user administrator /active:yes激活账户;3、进入安全模式执行相同命令修复登录问题;4、利用组策略编辑器更改管理员账户状态为启用,适用于专业版系统。 如果您尝试登录Windows 10系统时发现管…

    2026年9月24日
    100
  • 如何监控Linux进程内存泄漏 pmap与valgrind工具使用

    如何监控Linux进程内存泄漏 pmap与valgrind工具使用如何监控Linux进程内存泄漏 pmap与valgrind工具使用如何监控Linux进程内存泄漏 pmap与valgrind工具使用如何监控Linux进程内存泄漏 pmap与valgrind工具使用

    要监控linux进程的内存泄漏,首先使用pmap观察内存增长趋势,再用valgrind定位具体泄漏点。一、使用pmap -x 查看进程内存映射,重点关注anon列和总内存变化,通过定期刷新判断是否存在异常增长;二、利用valgrind –leak-check=full启动程序,分析报告中…

    2026年9月24日 用户投稿
    100
  • mysql中是什么意思 mysql语法符号含义解析

    mysql 中的符号和关键字是与数据库交互的基本工具,正确使用它们可以提高工作效率和查询准确性。1. 逗号(,)用于分隔列表中的元素,如列名和值。2. 点号(.)用于访问表中的列或调用函数。3. 星号(*)用于选择所有列,但应避免使用以提高查询性能。4. 百分号(%)用于 like 操作中的模式匹配…

    2026年9月24日
    100
  • Spring Boot 测试中 403 错误排查与安全配置优化

    本文旨在解决 Spring Boot 控制器层测试中常见的 403 Forbidden 错误,特别是当安全配置限制了访问权限时。文章将深入分析 WebSecurityConfig 和 @WithMockUser 的使用,提供两种主要解决方案:通过临时放松安全限制进行测试,以及确保角色/权限配置的正确…

    2026年9月24日
    100

发表回复

登录后才能评论
关注微信