MySQL系列—8.物理结构

news2024/9/25 15:28:35

目录

1.系统表空间 ibdata

2.通用表空间 .ibd

3.独立表空间

4.Undo 表空间

5.临时表空间

6.Redo Log File


1.系统表空间 ibdata

系统表空间由参数innodb_data_file_path定义路径、初始化大小、自动扩展策略

如: innodb_data_file_path=/dayta/mysql/ibdata1:100M:autoextend

存放:

Change Buffer(insert buffer)

Lock System

Data Dictionary

Foreign key constaint system tables

User data (innodb_file_per_table=0,不使用独立表空间的时候,用户数据会存储共享表空 间中,有可能会存放在系统表空间。)

2.通用表空间 .ibd

类似于Oracle的表空间概念,多个Table放在同一个表空间中。

mysql> create tablespace tbs add datafile 'tbs.ibd';
Query OK, 0 rows affected (0.01 sec)

mysql>  select * from information_schema.innodb_tablespaces;
+------------+------------------+-------+----------------------+-----------+---------------+------------+---------------+-----------+----------------+-----------------+----------------+---------------+------------+--------+
| SPACE      | NAME             | FLAG  | ROW_FORMAT           | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE | ALLOCATED_SIZE | AUTOEXTEND_SIZE | SERVER_VERSION | SPACE_VERSION | ENCRYPTION | STATE  |
+------------+------------------+-------+----------------------+-----------+---------------+------------+---------------+-----------+----------------+-----------------+----------------+---------------+------------+--------+
| 4294967294 | mysql            | 18432 | Any                  |     16384 |             0 | General    |          4096 |  27262976 |       27262976 |               0 | 8.0.39         |             1 | N          | normal |
| 4294967293 | innodb_temporary |  4096 | Compact or Redundant |     16384 |             0 | System     |          4096 |  12582912 |       12582912 |               0 | 8.0.39         |             1 | N          | normal |
| 4294967279 | innodb_undo_001  |     0 | Undo                 |     16384 |             0 | Undo       |          4096 |  16777216 |       16777216 |               0 | 8.0.39         |             1 | N          | active |
| 4294967278 | innodb_undo_002  |     0 | Undo                 |     16384 |             0 | Undo       |          4096 |  16777216 |       16777216 |               0 | 8.0.39         |             1 | N          | active |
|          1 | sys/sys_config   | 16417 | Dynamic              |     16384 |             0 | Single     |          4096 |    114688 |         114688 |               0 | 8.0.39         |             1 | N          | normal |
|          2 | tbs              | 18432 | Any                  |     16384 |             0 | General    |          4096 |    114688 |         114688 |               0 | 8.0.39         |             1 | N          | normal |
+------------+------------------+-------+----------------------+-----------+---------------+------------+---------------+-----------+----------------+-----------------+----------------+---------------+------------+--------+
6 rows in set (0.00 sec)
mysql> create table t2 (id int) tablespace tbs;
Query OK, 0 rows affected (0.01 sec)
mysql> show create table t2;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                                                                |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------+
| t2    | CREATE TABLE `t2` (
  `id` int DEFAULT NULL
) /*!50100 TABLESPACE `tbs` */ ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

3.独立表空间

每个table都有各自的.ibd文件

删除大表的一个技巧(释放文件名)

为数据文件建立硬链接,然后删除原数据文件名,待到空闲时间再清理链接的文件数据

innodb_file_per_table

为1时(默认),启用独立表空间

为0时,启用共享表空间,用户数据存储在系统表空间ibdata*文件中,或者自定义的通用表空间general tablespace中。

为1时,启用独立表空间,每个表有各自的.ibd文件

4.Undo 表空间

实例初始化时,默认创建两个Undo表空间,最大支持127个Undo表空间。

innodb_rollback_segments:于定义每个undo表空间中的回滚段rollback segment的 数量,默认是128个

一个回滚段rollback segment默认最大只有128 个,实例初始化后默认2个undo表空间:128*2个undo tbs= 256个并发事务。所以高并发需求 时需要注意增加undo表空间。

全局Undo表空间

mysql> show global variables like '%undo%';
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| innodb_max_undo_log_size | 1073741824 |
| innodb_undo_directory    | ./         |
| innodb_undo_log_encrypt  | OFF        |
| innodb_undo_log_truncate | ON         |
| innodb_undo_tablespaces  | 2          |
+--------------------------+------------+
5 rows in set (0.00 sec)

查看当前的Undo表空间

mysql> select * from information_schema.innodb_tablespaces where space_type='undo';
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+-----------+----------------+-----------------+----------------+---------------+------------+--------+
| SPACE      | NAME            | FLAG | ROW_FORMAT | PAGE_SIZE | ZIP_PAGE_SIZE | SPACE_TYPE | FS_BLOCK_SIZE | FILE_SIZE | ALLOCATED_SIZE | AUTOEXTEND_SIZE | SERVER_VERSION | SPACE_VERSION | ENCRYPTION | STATE  |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+-----------+----------------+-----------------+----------------+---------------+------------+--------+
| 4294967279 | innodb_undo_001 |    0 | Undo       |     16384 |             0 | Undo       |          4096 |  16777216 |       16777216 |               0 | 8.0.39         |             1 | N          | active |
| 4294967278 | innodb_undo_002 |    0 | Undo       |     16384 |             0 | Undo       |          4096 |  16777216 |       16777216 |               0 | 8.0.39         |             1 | N          | active |
+------------+-----------------+------+------------+-----------+---------------+------------+---------------+-----------+----------------+-----------------+----------------+---------------+------------+--------+
2 rows in set (0.01 sec)

查看Undo表空间数据文件

mysql> select file_id,file_type,tablespace_name,file_name,status from files;
+------------+------------+------------------+----------------------+--------+
| FILE_ID    | FILE_TYPE  | TABLESPACE_NAME  | FILE_NAME            | STATUS |
+------------+------------+------------------+----------------------+--------+
| 4294967294 | TABLESPACE | mysql            | ./mysql.ibd          | NORMAL |
|          0 | TABLESPACE | innodb_system    | ./ibdata1            | NORMAL |
| 4294967293 | TEMPORARY  | innodb_temporary | ./ibtmp1             | NORMAL |
| 4294967279 | UNDO LOG   | innodb_undo_001  | ./undo_001           | NORMAL |
| 4294967278 | UNDO LOG   | innodb_undo_002  | ./undo_002           | NORMAL |
|          1 | TABLESPACE | sys/sys_config   | ./sys/sys_config.ibd | NORMAL |
|          2 | TABLESPACE | tbs              | ./tbs.ibd            | NORMAL |
|          3 | TABLESPACE | test/t           | ./test/t.ibd         | NORMAL |
+------------+------------+------------------+----------------------+--------+
8 rows in set (0.00 sec)

8.0.14后,可以在线手动创建新的Undo表空间

create undo tablespace undo_name add datafile 'undo_name.ibu';

删除Undo表空间

--首先设置Undo为inactive
alter undo tablespace undo_name set inactive;

--然后再删除
drop undo tablespace undo_name;

自动清理Undo表空间

innodb_undo_log_truncate = 1 时会自动清理undo表空间

超过innodb_max_undo_log_size 时会触发

或者purge线程执行了innodb_purge_rseg_truncate_frequency() 128次

5.临时表空间

innodb_temp_data_file_path:定义路径、大小等,初始值12MB

实例关闭后,临时表文件会被删除,实例启动后,临时表文件(ibtmp1)重新创建

用户自己的临时表放在#innodb_temp/*.ibt,session会话退出后,临时段自动回收。

8.0以前, 有个严重问题,就是ibtmp1,用户执行过程中产生大量临时存在ibtmp1

文件被撑爆后也无法回缩的。

改进后只有innodb内部线程自己生成的临时表才会放在ibtmp1文件里。

用户运行过程中产生的临时表都会放在innodb_temp目录中

innodb_temp_tablespaces_dir:设置会话级用户临时表空间存储路径

会话级临时表空间初始共有10个,会随着用户连接数及创建临时表的情况按需增加,实例重 启后会删除这些文件。每个session最多分配两个临时表空间,一个用于存储用户主动创建的临时表(create temporary table),另一个用于存储用户执行SQL过程中生成的内部(磁盘)临时表,session断开后,会话级用户临时表空间会直接释放,不用再担心撑爆磁盘。

查看会话级临时表空间的使用情况:

select * from information_schema.innodb_session_temp_tablespaces;

查看全局临时表空间的情况:

 select * from files where tablespace_name like '%temp%'\G

创建session级别临时表,通过实验来观察临时表的分配、查看及回收:

mysql> create temporary table k1 like bigints;
Query OK, 0 rows affected (0.04 sec)
mysql> desc k1;
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| dtl | varchar(200) | YES | | NULL | NULL |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.02 sec)
mysql> insert into k1 select * from bigints;
Query OK, 2621440 rows affected (25.30 sec)
Records: 2621440 Duplicates: 0 Warnings: 0
--换一个session查询
mysql> select * from information_schema.innodb_temp_table_info;
+----------+--------------+--------+------------+
| TABLE_ID | NAME | N_COLS | SPACE |
+----------+--------------+--------+------------+
| 1089 | #sql4c_19_13 | 5 | 4294501264 |
+----------+--------------+--------+------------+
1 row in set (0.00 sec)
mysql> select * from information_schema.innodb_session_temp_tablespaces;
+----+------------+----------------------------+-----------+----------+-----
| ID | SPACE | PATH | SIZE | STATE | PURPOSE |
+----+------------+----------------------------+-----------+----------+-----
| 13 | 4294501265 | ./#innodb_temp/temp_9.ibt | 98304 | ACTIVE | INTRINSI
| 29 | 4294501263 | ./#innodb_temp/temp_7.ibt | 134217728 | ACTIVE | USER
| 0 | 4294501257 | ./#innodb_temp/temp_1.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501258 | ./#innodb_temp/temp_2.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501259 | ./#innodb_temp/temp_3.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501260 | ./#innodb_temp/temp_4.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501261 | ./#innodb_temp/temp_5.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501262 | ./#innodb_temp/temp_6.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501264 | ./#innodb_temp/temp_8.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501266 | ./#innodb_temp/temp_10.ibt | 81920 | INACTIVE | NONE
+----+------------+----------------------------+-----------+----------+-----
10 rows in set (0.00 sec)
[17:34:49] root@ms85:#innodb_temp # ll -h
total 129M
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_10.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_1.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_2.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_3.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_4.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_5.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_6.ibt
-rw-r----- 1 mysql mysql 128M Jul 7 17:35 temp_7.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 17:31 temp_8.ibt
-rw-r----- 1 mysql mysql 96K Jul 7 17:23 temp_9.ibt
--断开前一个session
mysql> exit;
Bye
--再次查询,发现临时表已经被释放
mysql> select * from information_schema.innodb_temp_table_info;
Empty set (0.00 sec)
mysql> select * from information_schema.innodb_session_temp_tablespaces;
+----+------------+----------------------------+-------+----------+---------
| ID | SPACE | PATH | SIZE | STATE | PURPOSE |
+----+------------+----------------------------+-------+----------+---------
| 12 | 4294501266 | ./#innodb_temp/temp_10.ibt | 81920 | ACTIVE | INTRINSIC
| 13 | 4294501265 | ./#innodb_temp/temp_9.ibt | 98304 | ACTIVE | INTRINSIC
| 0 | 4294501257 | ./#innodb_temp/temp_1.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501258 | ./#innodb_temp/temp_2.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501259 | ./#innodb_temp/temp_3.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501260 | ./#innodb_temp/temp_4.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501261 | ./#innodb_temp/temp_5.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501262 | ./#innodb_temp/temp_6.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501264 | ./#innodb_temp/temp_8.ibt | 81920 | INACTIVE | NONE |
| 0 | 4294501263 | ./#innodb_temp/temp_7.ibt | 81920 | INACTIVE | NONE |
+----+------------+----------------------------+-------+----------+---------
10 rows in set (0.00 sec
[17:36:08] root@ms85:#innodb_temp # ll
total 336K
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_10.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_1.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_2.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_3.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_4.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_5.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 11:39 temp_6.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 17:36 temp_7.ibt
-rw-r----- 1 mysql mysql 80K Jul 7 17:31 temp_8.ibt
-rw-r----- 1 mysql mysql 96K Jul 7 17:23 temp_9.ibt

6.Redo Log File

从 MySQL 8.0.30 开始, innodb_redo_log_capacity系统变量控制 redo log 总的大小。

当 设置 参数 innodb_redo_log_capacity时 ,系统会忽略 innodb_log_files_in_group
innodb_log_file_size。否则,这些设置用于计算 innodb_redo_log_capacity

设置 ( innodb_log_files_in_group* innodb_log_file_size= innodb_redo_log_capacity)

redo 日志位置

redo log 文件存放的位置由参数 innodb_log_group_home_dir控制,如果没有指定具体目录,系统默认会将redo log存储到 data 目录的#innodb_redo目录。innodb_log_group_home_dir指定的文件夹下必须创建 #innodb_redo目录。

在 MySQL 8.0.30  版本中,MySQL会生成32个 redo log 文件,每个文件的大小等于 1/32 * innodb_redo_log_capacity,redo log 有两种:正在使用的和未被使用的,分别使用  #ib_redoNN
#ib_redoNN_tmp,其中NN是重做日志文件编号。

redo信息查看

mysql> select * from performance_schema.innodb_redo_log_files;
+---------+--------------------------+-----------+----------+---------------+---------+----------------+
| FILE_ID | FILE_NAME                | START_LSN | END_LSN  | SIZE_IN_BYTES | IS_FULL | CONSUMER_LEVEL |
+---------+--------------------------+-----------+----------+---------------+---------+----------------+
|       7 | ./#innodb_redo/#ib_redo7 |  22931456 | 26206208 |       3276800 |       0 |              0 |
+---------+--------------------------+-----------+----------+---------------+---------+----------------+
1 row in set (0.00 sec)

日志块(log block)

在 InnoDB 存储引擎中,redo log是以块为单位进行存储的,每个块占 512 字节,这称为redo log block。所以不管是log buffer中还是os buffer中以及redo log file on disk中,都是这样以 512 字节的块存储的。

每个redo log block由 3 部分组成:日志块头、日志块尾和日志主体。

日志块头包含 4 部分:

  • log_block_hdr_no:占 4 字节,表示该日志块在redo log buffer中的位置 ID。

  • log_block_hdr_data_len:占 2 字节,表示该log block中已记录的log大小,写满该log block时为0x200,表示 512 字节。

  • log_block_first_rec_group:占 2 字节,表示该log block中第一个log的开始偏移位置。

  • log_block_checkpoint_no:占 4 字节,表示该log block写入检查点信息的位置。

关于log block块头的第三部分log_block_first_rec_group,因为有时候一个数据页产生的日志量超出了一个日志块,这是需要用多个日志块来记录该页的相关日志。例如,某一数据页产生了 552 字节的日志量,那么需要占用两个日志块,第一个日志块占用 492 字节,第二个日志块需要占用 60 个字节,那么对于第二个日志块来说,它的第一个log的开始位置就是73字节(60+12)。如果该部分的值和log_block_hdr_data_len相等,则说明该log block中没有新开始的日志块,即表示该日志块用来延续前一个日志块。

日志尾只有一个部分:log_block_trl_no,该值和块头的log_block_hdr_no相等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2121406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

感恩 各位老师们!和滋养你的人在一起,确实很重要——早读(逆天打工人爬取热门微信文章解读)

感恩 各位老师们 引言Python 代码第一篇 洞见 和滋养你的人在一起,确实很重要第二篇 一天 风云突变结尾 (不是 现在网上在呢么各种图都有 哈哈哈) 引言 今天是什么特殊的日子吗? 没错 教师节 说起这个教师节 我觉得大家更要记住…

【北京迅为】《STM32MP157开发板使用手册》-第十九章 Yocto系统开发

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

C++——list的实现

目录 0.前言 1.节点类 2.迭代器类 ①普通迭代器 ②const迭代器 ③模板迭代器 3.list类 3.1 clear、析构函数、swap ①clear ② 析构函数 ③ swap 3.2构造函数 ①无参构造 ②赋值构造 3.3 迭代器 3.4插入函数 ①insert插入 ②头插 ③尾插 3.5 删除函数…

【分治】归并排序

【分治】归并排序 1. 排序数组1. 1题目来源1.2 题目描述1.3 题目解析 2. LCR 170. 交易逆序对的总数2. 1题目来源2.2 题目描述2.3 题目解析 3. 计算右侧小于当前元素的个数3. 1题目来源3.2 题目描述3.3 题目解析 1. 排序数组 1. 1题目来源 912. 排序数组 1.2 题目描述 给你…

JAVA毕业设计171—基于Java+Springboot+vue3+小程序的宠物店小程序系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3小程序的宠物店小程序系统(源代码数据库)171 一、系统介绍 本项目前后端分离(可以改为ssm版本),分为用户、店员、管理员三种角色 1、用户&…

存储课程学习笔记1_访问scsi磁盘读写测试(struct sg_io_hdr,ioctl,mmap)

创建虚拟机时,可以选择SCSI,STAT,NVME不同类型的磁盘。 0:总结 》了解内核提供的访问scsi的结构和方法 (主要是sg_io_hdr_t 结构体和ioctl函数)。 》需要读scsi协议文档,了解相关指令,只演示了16字节固定…

华为eNSP :WLAN的配置

一、WLAN的知识点: VLAN配置: VLAN:可以想象成一个大房子(网络)里划分的不同房间(VLAN)。每个房间可以有自己的功能,比如一个用于睡觉(管理),另一…

软件工程知识点总结(5):详细设计

面向对象详细设计举例:接口描述、算法描述、数据描述 类的详细描述,内含数据、 方法及方法的参数返回值 public class User { private String userId; private String userName; private String password; private int type; public User(String userId…

基于APISIX实现API网关案例分享

一、APISIX介绍 1、定义 Apache APISIX 是一个动态、实时、高性能的云原生 API 网关。它构建于 NGINX + ngx_lua 的技术基础之上,充分利用了 LuaJIT 所提供的强大性能。 2、软件架构 2.1、架构图 APISIX 主要分为两个部分: APISIX 核心:包括 Lua 插件、多语言插件运行时…

ICM20948 DMP代码详解(12)

接前一篇文章:ICM20948 DMP代码详解(11) 上一回开始解析icm20948_sensor_setup函数的第2段代码也即inv_icm20948_init_matrix函数: /* Setup accel and gyro mounting matrix and associated angle for current board */inv_icm20…

前端技术(七)——less 教程

一、less简介 1. less是什么? less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Mixin、函数等特性,使CSS 更易维护和扩展LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服…

关于武汉芯景科技有限公司的IIC缓冲器芯片XJ4307开发指南(兼容LTC4307)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.总线超时,自动断开连接 当 SDAOUT 或 SCLOUT 为低电平时,将启动内部定时器。定时器仅在相应输入变为高电平时重置。如果在 30ms (典型值) 内没有变为高…

社交媒体的未来:Facebook如何通过AI技术引领潮流

在数字化时代的浪潮中,社交媒体平台不断演变,以适应用户需求和技术发展的变化。作为全球领先的社交媒体平台,Facebook在这一进程中扮演了重要角色。尤其是人工智能(AI)技术的应用,正在深刻地改变Facebook的…

Docker零基础入门

参考课程https://www.bilibili.com/video/BV1VC4y177re/?vd_source=b15169a302bee35f484245aecc69d4dd 参考书籍Docker 实践 - 面向 AI 开发人员的 Docker 实践 (dockerpractice.readthedocs.io) 1. 什么是Docker 1.1. Docker起源 随着计算机的发展,计算机上已经可以运行多…

Stable Diffusion绘画 | ControlNet应用-Inpaint(局部重绘):更完美的重绘

Inpaint(局部重绘) 相当于小号的AI版PS,不但可以进行局部画面的修改,还可以去除背景中多余的内容,或者是四周画面内容的扩充。 预处理器说明 Inpaint_Global_Harmonious:重绘-全局融合算法,会对整个图片的画面和色调…

【无标题】SAM(Segment Anything Model)

1.SAM是什么? SAM是基于NLP的一个基础模型,专注于提示分割任务,使用提升工程来适应不同的下游分割任务。 2.SAM有什么用? 1)SAM 可以通过简单地单击或交互选择要包含或排除在对象中的点来分割对象。还可以通过使用多边…

成都爱尔综合眼病科李晓峰主任解析空调续命,干眼别忍!

高温酷暑,命都是空调给的。 凉风一直吹,根本不敢停。 热到大汗淋漓,身体缺水,眼睛也是。 屋外闷热湿度不低,屋内空调一开湿度“骤降”不够用。 房间被“除湿”,眼睛也不例外。 长时间吹空调&#xff0c…

基于C++实现(控制台)模拟网上购书订单管理系统

模拟网上购书订单管理系统(大一小学期C大作业) 一、任务 1. 基础任务 建立继承了Buyer类的三个子类作为顾客的三种类型,用于管理顾客对象;建立Book类,管理书本对象;根据不同类型的顾客,计算出…

全球主要指数年度收益率汇总

1 美国 1.1 道琼斯工业平均指数 DJIA 1.2 纳斯达克综合指数 IXIC 1.3 纳斯达克100指数 NDX 1.4 标准普尔500 INX 2 中国 2.1 国债指数 000021 2.2 上证综指 000001 2.3 深证成指 399001 2.4 创业板 399006 2.5 中小100 399005 2.6 上证50 000016 3 香港

智能可视耳勺怎么用?智能可视耳勺使用方法!

随着科技的进步,有很多人摒弃了传统挖耳勺,选择更加高效直观的智能可视耳勺,这是因为智能可视耳勺能更加直观地看到耳朵的内部,让掏耳过程清晰明了,精准掏出耳垢。 但市场有的智能可视耳勺鱼龙混杂,很多人在…