oracle常用sql
oracle常用sql
- oracle常用sql
- 查询当前会话id(sid),会话序列号(serial#),操作系统进程id(spid)
- 查询数据库信息
- 查询实例信息
- 查询字符集
- 查看回收站情况
- 数据库系统PSU信息
- 数据库大小
- 查看表空间状况
- 常规库表空间情况查询,非CDB
- CBD表空间情况查询
- 当前客户端信息
- 资源使用情况
- 查看所有参数
- 数据库闪回空间使用情况
- 数据库闪回空间总体使用情况
- 数据库闪回空间详细使用情况
- 临时表空间使用情况
- 数据文件状况
- 控制文件
- ASM磁盘使用情况
- ASM磁盘组使用情况
- ASM磁盘组参数配置情况
- 闪回参数查询
- 归档参数查询
- 归档路径查询
- 近一个月归档日志情况
- 近一月内产生的归档日志总大小
- 近一月内每天产生的归档日志总大小
- 日志组大小
- SGA使用情况
- SGA配置信息
- SGA target advice
- PGA Target advice
- 文件IO信息
- 文件IO读写分析
- 文件IO时间分析
- 逻辑读TOP10的SQL语句
- 物理读TOP10的SQL语句
- 执行时间TOP10的SQL语句
- 执行次数TOP10的SQL语句
- 解析次数TOP10的SQL语句
- VERSION_COUNT TOP10的SQL语句
- 内存TOP10的SQL语句
- DISK_SORT严重的SQL
- 从ASH视图查询SQL
- 最耗CPU的SQL语句
- 最耗I/O的SQL语句
- 最消耗资源的SQL语句
- 执行时间最长SQL
- 数据库用户查询
- 拥有DBA角色的用户
- 拥有SYS角色的用户
- 超过1000行无主键的表
- 只取数据量最大的前50张表,行数大于1000
- 查找大小超过10GB的表
- 历史ACTIVE会话数(按照小时展示)
- 常规库查看LOCK锁情况
- 常规库查看谁锁住了谁
- CDB库查看锁情况
oracle常用sql
查询当前会话id(sid),会话序列号(serial#),操作系统进程id(spid)
-- 查询当前会话id(sid),会话序列号(serial#),操作系统进程id(spid)
SELECT a.SID,b.SERIAL#,c.SPID
FROM v$mystat a,v$session b,v$process c
WHERE a.SID = b.SID
and b.PADDR=c.ADDR
AND ROWNUM = 1;
查询数据库信息
-- 查询数据库信息
SELECTDBID,NAME,LOG_MODE,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,FORCE_LOGGING,CURRENT_SCN,FLASHBACK_ON,DB_UNIQUE_NAME
FROM V$DATABASE;
查询实例信息
-- 查询实例信息
SELECTINSTANCE_NUMBER,INSTANCE_NAME,HOST_NAME,VERSION,STATUS,THREAD#
FROM V$INSTANCE;
查询字符集
-- 查询字符集
SELECT value$ characterset FROM sys.props$ WHERE name='NLS_CHARACTERSET';
SELECT userenv('language') characterset FROM dual;
查看回收站情况
-- 查看回收站情况
SELECT '状态:' || a.VALUE || ',占用空间:' ||(SELECT round(SUM(a.space * (SELECT valueFROM v$parameterWHERE name = 'db_block_size')) / 1024 / 1024,2) || 'M,共' || count(1) || '个对象'FROM cdb_recyclebin a) recyclebin1FROM v$parameter aWHERE a.NAME = 'recyclebin';SELECT * FROM RECYCLEBIN;
SELECT * FROM DBA_RECYCLEBIN;
SELECT * FROM USER_RECYCLEBIN;
SELECT * FROM CDB_RECYCLEBIN;
数据库系统PSU信息
-- 数据库系统PSU信息
SELECT d.con_id,to_char(d.action_time, 'YYYY-MM-DD HH24:MI:SS') action_time,d.action,d.namespace,d.id,--d.bundle_series,d.commentsFROM CDB_REGISTRY_HISTORY dORDER BY d.con_id, d.action_time;
数据库大小
-- 数据库大小
-- ts_datafile_physical_size_G表示所有表空间的物理文件实际占用大小,即表空间大小(不包括temp表空间)
-- ts_tempfile_physical_size_G表示所有临时表空间的文件实际占用大小
-- ts_datafile_used_size_G表示所有表空间的使用大小,数据文件实际使用大小,RMAN非压缩备份大小(若使用压缩as compressed备份则至少可以减少一半空间)
select A.CON_ID,A.ts_datafile_physical_size_G,B.ts_tempfile_physical_size_G,C.ts_datafile_used_size_GFROM (select A.CON_ID,round(sum(bytes) / 1024 / 1024 / 1024, 2) ts_datafile_physical_size_Gfrom CDB_data_files AGROUP BY A.CON_ID) A,(select A.CON_ID,round(sum(bytes) / 1024 / 1024 / 1024, 2) ts_tempfile_physical_size_Gfrom CDB_temp_files AGROUP BY A.CON_ID) B,(select A.CON_ID,round(sum(bytes) / 1024 / 1024 / 1024, 2) ts_datafile_used_size_Gfrom CDB_segments AGROUP BY A.CON_ID) CWHERE A.CON_ID = B.CON_IDAND A.CON_ID = C.CON_IDORDER BY con_id;
查看表空间状况
常规库表空间情况查询,非CDB
WITH wt1 AS(SELECT ts.TABLESPACE_NAME,df.all_bytes,decode(df.TYPE,'D',nvl(fs.FREESIZ, 0),'T',df.all_bytes - nvl(fs.FREESIZ, 0)) FREESIZ,df.MAXSIZ,ts.BLOCK_SIZE,ts.LOGGING,ts.FORCE_LOGGING,ts.CONTENTS,ts.EXTENT_MANAGEMENT,ts.SEGMENT_SPACE_MANAGEMENT,ts.RETENTION,ts.DEF_TAB_COMPRESSION,ts.bigfile,df.ts_df_countFROM dba_tablespaces ts,(SELECT 'D' TYPE,TABLESPACE_NAME,COUNT(*) ts_df_count,SUM(BYTES) all_bytes,SUM(decode(MAXBYTES, 0, BYTES, MAXBYTES)) MAXSIZFROM dba_data_files dGROUP BY TABLESPACE_NAMEUNION ALLSELECT 'T',TABLESPACE_NAME,COUNT(*) ts_df_count,SUM(BYTES) all_bytes,SUM(decode(MAXBYTES, 0, BYTES, MAXBYTES))FROM dba_temp_files dGROUP BY TABLESPACE_NAME) df,(SELECT TABLESPACE_NAME, SUM(BYTES) FREESIZFROM dba_free_spaceGROUP BY TABLESPACE_NAMEUNION ALLSELECT tablespace_name, SUM(d.BLOCK_SIZE * a.BLOCKS) bytesFROM gv$sort_usage a, dba_tablespaces dWHERE a.tablespace = d.tablespace_nameGROUP BY tablespace_name) fsWHERE ts.TABLESPACE_NAME = df.TABLESPACE_NAMEAND ts.TABLESPACE_NAME = fs.TABLESPACE_NAME(+))
SELECT (SELECT A.TS#FROM V$TABLESPACE AWHERE A.NAME = UPPER(t.TABLESPACE_NAME)) TS#,t.TABLESPACE_NAME TS_Name,round(t.all_bytes / 1024 / 1024) ts_size_M,round(t.freesiz / 1024 / 1024) Free_Size_M,round((t.all_bytes - t.FREESIZ) / 1024 / 1024) Used_Size_M,round((t.all_bytes - t.FREESIZ) * 100 / t.all_bytes, 3) Used_per,round(MAXSIZ / 1024 / 1024 / 1024, 3) MAX_Size_g,round(decode(MAXSIZ, 0, to_number(NULL), (t.all_bytes - FREESIZ)) * 100 /MAXSIZ,1) USED_per_MAX,round(t.BLOCK_SIZE) BLOCK_SIZE,t.LOGGING,t.FORCE_LOGGING,t.CONTENTS,t.EXTENT_MANAGEMENT,t.SEGMENT_SPACE_MANAGEMENT,t.RETENTION,t.DEF_TAB_COMPRESSION,t.bigfile,t.ts_df_countFROM wt1 t;
CBD表空间情况查询
SELECT CON_ID,PDBNAME,TS#,TS_NAME,type,TS_SIZE_M,FREE_SIZE_M,USED_SIZE_M,USED_PER,MAX_SIZE_G,USED_PER_MAX,BLOCK_SIZE,LOGGING,TS_DF_COUNT
FROM (WITH wt1 AS (SELECT ts.CON_ID,(SELECT np.NAMEFROM V$CONTAINERS npWHERE np.CON_ID = tS.con_id) PDBNAME,(SELECT A.TS#FROM V$TABLESPACE AWHERE A.NAME = UPPER(tS.TABLESPACE_NAME)AND a.CON_ID = tS.con_id) TS#,ts.TABLESPACE_NAME,df.all_bytes,decode(df.TYPE,'D',nvl(fs.FREESIZ, 0),'T',df.all_bytes - nvl(fs.FREESIZ, 0)) FREESIZ,df.MAXSIZ,ts.BLOCK_SIZE,ts.LOGGING,ts.FORCE_LOGGING,ts.CONTENTS,ts.EXTENT_MANAGEMENT,ts.SEGMENT_SPACE_MANAGEMENT,ts.RETENTION,ts.DEF_TAB_COMPRESSION,df.ts_df_countFROM cdb_tablespaces ts,(SELECT d.CON_ID,'D' TYPE,TABLESPACE_NAME,COUNT(*) ts_df_count,SUM(BYTES) all_bytes,SUM(decode(MAXBYTES, 0, BYTES, MAXBYTES)) MAXSIZFROM cdb_data_files dGROUP BY d.CON_ID,TABLESPACE_NAMEUNION ALLSELECT d.CON_ID,'T',TABLESPACE_NAME,COUNT(*) ts_df_count,SUM(BYTES) all_bytes,SUM(decode(MAXBYTES, 0, BYTES, MAXBYTES))FROM cdb_temp_files dGROUP BY d.CON_ID,TABLESPACE_NAME) df,(SELECT d.CON_ID,TABLESPACE_NAME,SUM(BYTES) FREESIZFROM cdb_free_space dGROUP BY d.CON_ID,TABLESPACE_NAMEUNION ALLSELECT d.CON_ID,tablespace_name,SUM(d.BLOCK_SIZE * a.BLOCKS) bytesFROM gv$sort_usage a,cdb_tablespaces dWHERE a.tablespace = d.tablespace_nameAND a.CON_ID = d.CON_IDGROUP BY d.CON_ID,tablespace_name) fsWHERE ts.TABLESPACE_NAME = df.TABLESPACE_NAMEAND ts.CON_ID = df.CON_IDAND ts.TABLESPACE_NAME = fs.TABLESPACE_NAME(+)AND ts.CON_ID = fs.CON_ID(+))SELECT T.CON_ID,(CASEWHEN T.PDBNAME = LAG(T.PDBNAME, 1)OVER(PARTITION BY T.PDBNAME ORDER BY TS#) THENNULLELSET.PDBNAMEEND) PDBNAME,TS#,t.TABLESPACE_NAME TS_Name,t.CONTENTS type,round(t.all_bytes / 1024 / 1024) ts_size_M,round(t.freesiz / 1024 / 1024) Free_Size_M,round((t.all_bytes - t.FREESIZ) / 1024 / 1024) Used_Size_M,round((t.all_bytes - t.FREESIZ) * 100 / t.all_bytes, 3) Used_per,round(MAXSIZ / 1024 / 1024 / 1024, 3) MAX_Size_g,round(decode(MAXSIZ,0,to_number(NULL),(t.all_bytes - FREESIZ)) * 100 / MAXSIZ,3) USED_per_MAX,round(t.BLOCK_SIZE) BLOCK_SIZE,t.LOGGING,t.ts_df_countFROM wt1 t);
当前客户端信息
SELECT sys_context('USERENV', 'ACTION') ACTION,sys_context('USERENV', 'AUTHENTICATED_IDENTITY') AUTHENTICATED_IDENTITY,sys_context('USERENV', 'AUTHENTICATION_TYPE') AUTHENTICATION_TYPE,sys_context('USERENV', 'AUTHENTICATION_METHOD') AUTHENTICATION_METHOD,sys_context('USERENV', 'CURRENT_EDITION_NAME') CURRENT_EDITION_NAME,sys_context('USERENV', 'CURRENT_SCHEMA') CURRENT_SCHEMA,sys_context('USERENV', 'CURRENT_USER') CURRENT_USER,sys_context('USERENV', 'DATABASE_ROLE') DATABASE_ROLE,sys_context('USERENV', 'DB_NAME') DB_NAME,sys_context('USERENV', 'DB_UNIQUE_NAME') DB_UNIQUE_NAME,sys_context('USERENV', 'HOST') HOST,sys_context('USERENV', 'IDENTIFICATION_TYPE') IDENTIFICATION_TYPE,sys_context('USERENV', 'INSTANCE') INSTANCE,sys_context('USERENV', 'INSTANCE_NAME') INSTANCE_NAME,sys_context('USERENV', 'IP_ADDRESS') IP_ADDRESS,sys_context('USERENV', 'ISDBA') ISDBA,sys_context('USERENV', 'LANG') LANG,sys_context('USERENV', 'LANGUAGE') LANGUAGE,sys_context('USERENV', 'MODULE') MODULE,sys_context('USERENV', 'NETWORK_PROTOCOL') NETWORK_PROTOCOL,sys_context('USERENV', 'NLS_CALENDAR') NLS_CALENDAR,sys_context('USERENV', 'NLS_CURRENCY') NLS_CURRENCY,sys_context('USERENV', 'NLS_DATE_FORMAT') NLS_DATE_FORMAT,sys_context('USERENV', 'NLS_DATE_LANGUAGE') NLS_DATE_LANGUAGE,sys_context('USERENV', 'NLS_SORT') NLS_SORT,sys_context('USERENV', 'NLS_TERRITORY') NLS_TERRITORY,sys_context('USERENV', 'OS_USER') OS_USER,sys_context('USERENV', 'SERVER_HOST') SERVER_HOST,sys_context('USERENV', 'SERVICE_NAME') SERVICE_NAME,sys_context('USERENV', 'SESSION_EDITION_ID') SESSION_EDITION_ID,sys_context('USERENV', 'SESSION_EDITION_NAME') SESSION_EDITION_NAME,sys_context('USERENV', 'SESSION_USER') SESSION_USER,sys_context('USERENV', 'SESSIONID') SESSIONID,sys_context('USERENV', 'SID') SID,sys_context('USERENV', 'TERMINAL') TERMINALFROM dual;
资源使用情况
SELECT a.con_id,a.inst_id as "实例id",a.resource_name as "资源名称",a.current_utilization as "当前值",a.max_utilization as "最大值",a.initial_allocation as "初始值",a.limit_value as "限制值"FROM gv$resource_limit aorder by a.con_id, a.inst_id, a相关文章:
oracle常用sql
oracle常用sql oracle常用sql查询当前会话id(sid),会话序列号(serial#),操作系统进程id(spid)查询数据库信息查询实例信息查询字符集查看回收站情况数据库系统PSU信息数据库大小查看表空间状况常规库表空间情况查询,非CDBCBD表空间情况查询当前客户端信息资源使用情况…...
手游模拟器长时间运行后,游戏掉帧且不恢复
1)手游模拟器长时间运行后,游戏掉帧且不恢复 2)FrameBuffer Fetch无论哪种模式在确定支持的手机上显示全紫 3)协程中yield return CoFunction()和yield return StartCoroutine(CoFunction())的区别 这是第353篇UWA技术知识分享的推…...
linux下离线安装telnet
安装过程概要: (一)互联网端下载rpm包; (二)上传到服务器root目录下; (三)安装telnet服务和测试: 详细内容: (一)互联…...
Unity 发布WebGL平台,C#与JavaScript交互
发布H5平台,接入SDK,比如微信等,涉及到C#与JS的交互。 jslib(JavaScript Library)是Unity的一种机制,允许你在C#中通过JavaScript代码来执行一些操作。这是一种高级的技巧,主要用于一些特殊情况…...
利用 Forcing InnoDB Recovery 特性解决 MySQL 重启失败的问题
问题 由于异常断电或者系统异常重启时 MySQL 没有正常退出导致 MySQL 无法启动,启动时报错如下: [System] [Server] /usr/sbin/mysqld (mysqld 8.0.30) starting as process 2665 [System] [InnoDB] InnoDB initialization has started. [System] [Inn…...
windows修改键位F11变insert(改键盘映射)
这里是通过改变windows的注册表来实现的 1.按住winr打开运行,在运行中输入“regedit”,再点击“确定”按钮。如下图 2.找到注册表的目录 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 3.在Keyboard Layout右击新建 -> 二进…...
安装gpu版本的paddle和paddleclas
安装gpu版本的paddle python -m pip install paddlepaddle-gpu2.3.2.post111 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html以上支持cuda11.1版本 其他需求可查阅文档在这里 安装paddleclas 1 在虚拟环境中安装所需的Python库: pip inst…...
61从零开始学Java之处理大数字相关的类有哪些?
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们知道,在现实世界里,实际上数字是有无穷个的,就比如0和1之间&a…...
vscode 搜索界面的files to include files to exclude 是什么功能?
在VSCode(Visual Studio Code)中,搜索功能是一个强大的工具,可以帮助你在项目中快速查找特定的文本、代码或其他内容。搜索界面的 “files to include” 和 “files to exclude” 提供了一种方式来定制你的搜索范围。 files to in…...
数据计算-第15届蓝桥杯第一次STEMA测评Scratch真题精选
[导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第154讲。 第15届蓝桥杯第1次STEMA测评已于2023年8月20日落下帷幕,编程题一共有6题,分别如下&a…...
谈谈前端和后端的选择
引言 在我的印象中,也是视线里,后端都是在一个黑屏的页面,左边一个文件类,右边在不停的写sql,一只手放在键盘上,一边写,一遍不停的关联进入,感觉很无趣,他们的分享不是什么java集成&…...
Vue3最佳实践 第六章 Pinia,Vuex与axios,VueUse 1(Pinia)
Pinia状态管理 在 Vue3 中项目中组件之间传递数据时,可以使用 Props 和 Emit,还可以使用 Provide/Inject 来代替 Props 和 Emit。Props 和 Emit 只能在具有父子关系的组件之间传递数据,所以层级越深,过程就越复杂。为了解决此类问…...
Java比较器之equals、comparable、comparator
文章目录 前言一、基本类型比较1.2.equals3.和equals的区别 二、对象的比较1.覆写基类的equals2.基于Comparable接口类的比较3.基于Comparator比较器比较4.三种方式对比 前言 在Java中,基本类型的对象可以直接比较,而自定义类型,默认是用equ…...
Virtio-user使用简介
一、简述 DPDK支持几种方式让用户空间的报文重新进入内核协议栈(这种dpdk和kernel直接通信的路径叫做exception path),例如tap/tun设备使用,kni,Virtio-user。这里主要讲Virtio-user使用,Virtio-user是virtio PMD的虚拟设备&…...
点云从入门到精通技术详解100篇-基于深度学习的三维植物点云分割网络
目录 前言 研究现状及趋势 传统的植物表型分割方法 现行的植物表型分割方法...
C语言 Cortex-A7核 SPI 实验
1 实验目的 1、数码管显示相同的值0000 1111 2222 .... 9999 2、数码管不同的值1234 2 代码 include/spi.h #ifndef __SPI_H__ #define __SPI_H__ #includ…...
Spring工具类--ReflectionUtils的使用
原文网址:Spring工具类系列--ReflectionUtils的使用_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Spring的ReflectionUtils的使用。 ReflectionUtils工具类的作用:便利地进行反射操作。 Spring还有一个工具类:ReflectUtils,它们在…...
zemax西德莫尔目镜
高性能的军用光学仪器 在两个双胶合透镜之间,增加了一块平凸透镜 半视场角增大到35度 入瞳直径4mm波长0.51、0.56、0.61半视场35焦距27.9mm 镜头参数: 成像效果:...
C++ 拷贝构造函数
介绍和示例 拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给函数。 复制对象…...
怎么使用 Flink 向 Apache Doris 表中写 Bitmap 类型的数据
Bitmap是一种经典的数据结构,用于高效地对大量的二进制数据进行压缩存储和快速查询。Doris支持bitmap数据类型,在Flink计算场景中,可以结合Flink doris Connector对bitmap数据做计算。 社区里很多小伙伴在是Doris Flink Connector的时候&…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...
