数据库模式与表空间具体区别是啥呢?数据库模式是所有数据的逻辑结构。而表空间存储了所有表数据

如题所述

模式:这就是一个概念,没法通俗表达,我干了3年的程序员,没感觉这个概念对工作有太大帮助。
[数据库的三级模式]
用户级对应外模式,概念级对应模式,物理级对应内模式。物理级数据库是客观存在的;概念级数据库是物理数据库的一种逻辑的、抽象的描述(即模式);用户级数据库是用户与数据库的接口,是概念级数据库的子集(外模式)。

数据库:一个能存储数据的工具[比如oracle是一种数据库,mysql,sqlserver,accese都是数据库,区别就是它们的存储性能和优势不同]

表空间:数据库里可以存放以表为单位的整体数据(比如:顾客表,金额表,业务表),表空间就是在数据库里放这种表的地方(物理空间)

实列:就是表中的列,可以让一张表内存放不同的数据。

最后,一句话说一下各个概念的涵盖关系,希望能够帮助你理解
我使用oracle数据库,在表空间中建立了一张Temp表,其中有2个实列:id和name
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-12-07
一、系统表空间
在 MySQL 数据目录下有一个名为 ibdata1 的文件,可以保存一张或者多张表。
923275 12M -rw-r----- 1 mysql mysql 12M 3月 18 10:42 ibdata1
这个文件就是 MySQL 的系统表空间文件,默认为 1 个,可以有多个,只需要在配置文件 my.cnf 里面这样定义即可。
innodb_data_file_path=ibdata1:200M;ibdata2:200M:autoextend:max:800M系统表空间不仅可以是文件系统组成的文件,也可以是非文件系统组成的磁盘块,比如裸设备,定义也很简单innodb_data_file_path=/dev/nvme0n1p1:3Gnewraw;/dev/nvme0n1p2:2Gnewraw
系统表空间里都有些啥内容?
具体内容包括:double writer buffer、 change buffer、数据字典(MySQL 8.0 之前)、表数据、表索引。
那 MySQL 为什么现在主流版本默认都不是系统表空间?
究其原因,系统表空间有三个最大的缺点:原因 1:无法做到自动收缩磁盘空间,造成很大的空间浪费。即使它包含的表都被删掉,这部分空间也不会自动释放。
二、单表空间
单表空间不同于系统表空间,每个表空间和表是一一对应的关系,每张表都有自己的表空间。具体在磁盘上表现为后缀为 .ibd 的文件。比如表 t1,对应的表空间文件为 t1.ibd917107 96K -rw-r----- 1 mysql mysql 96K 3月 18 16:13 t1.ibd

单表空间如何应用到具体的表呢?
有两种方式:方式 1:在配置文件中开启。在配置文件中开启单表空间设置参数 innodb_filer_per_table,这样默认对当前库下所有表开启单表空间。innodb_file_per_table=1另外也可以直接建表时指定单表空间mysql> create table t1 (id int, r1 char(36)) tablespace innodb_file_per_table;
Query OK, 0 rows affected (0.04 sec)
单表空间除了解决之前说的系统表空间的几个缺点外,还有其他的优点,详细如下:
1. truncate table 操作比其他的任何表空间都快;
2. 可以把不同的表按照使用场景指定在不同的磁盘目录;
比如日志表放在慢点的磁盘,把需要经常随机读的表放在 SSD 上等。
mysql> create table ytt_dedicated (id int) data directory = '/var/lib/mysql-files';
Query OK, 0 rows affected (0.04 sec)3. 可以用 optimize table 来收缩或者重建经常增删改查的表。一般过程是这样的:建立和原来表一样的表结构和数据文件,把真实数据复制到临时文件,再删掉原始表定义和数据文件,最后把临时文件的名字改为和原始表一样的。
三、通用表空间
通用表空间先是出现在 MySQL Cluster 里,也就是 NDB 引擎。从 MySQL 5.7 引入到 InnoDB 引擎。通用表空间和系统表空间一样,也是共享表空间。每个表空间可以包含一张或者多张表,也就是说通用表空间和表之间是一对多的关系。
相似回答