iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 5.7如何创建一个表空间
  • 667
分享到

MySQL 5.7如何创建一个表空间

2024-04-02 19:04:59 667人浏览 独家记忆
摘要

这期内容当中小编将会给大家带来有关Mysql 5.7如何创建一个表空间,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 mysql里面的文件蛮有意思,之前大体有两个参数来

这期内容当中小编将会给大家带来有关Mysql 5.7如何创建一个表空间,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

mysql里面的文件蛮有意思,之前大体有两个参数来做基本的控制。一个是innodb_data_file_path就是一个共享表空间,数据都往这一个文件里放,也就是ibdata1,这个文件其实角色是有重复的,undo,数据都会放在一起。ibdata1会持续增长,无法收缩。另外一个参数是innodb_file_per_table,这样一来,就成了独立表空间,通俗一些就是每一个表都有独立的文件.frm和.ibd,而且实际中使用独立表空间还是比较普遍的,对于delete的操作影响Mysqloracle就大大不同。

  后来到了MySQL 5.7.5,新增了在线阶段undo log的功能,让undo从原本的ibdata1剥离出来,而对于通用的独立表空间的应用场景,MySQL也提供了另外一种管理方式,就是General tablespace。其实这个特性在Oracle中已经非常普遍,换个角度来理解就很容易了,它没有库的概念,可以在多个库里建属于同一表空间的表。

为了支持这个特性,主要做了两部分改动:Innodb层的支持及Server层对MDL子模块的改动。   

    创建一个表空间的语句很简单,语法如下:

CREATE TABLESPACE tablespace_name    ADD DATAFILE 'file_name'
    [FILE_BLOCK_SIZE = value]
        [ENGINE [=] engine_name]

大体的格式就是create tablespace xxx add datafile 'xxxx' engine=innodb; 这样的方式,存储单位默认是16k。

create tablespace general_ts1  add datafile 'general_ts1_01.dbf'   engine=innodb;
ERROR 3121 (HY000): Incorrect File Name 'general_ts1_01.dbf'.

这里需要说明的一点是,文件路径可以是绝对的,也可以是相对的。但是文件名就得是.ibd的格式。

 create tablespace general_ts1  add datafile 'general_ts1_01.ibd'   engine=innodb;
Query OK, 0 rows affected (0.06 sec)

当然我们可以使用create table xxx 指定tablespace的方式,或者是alter table 指定tablespace的方式。

下面这种方式在GTID下是不支持的,值得说明一下。

create table test_ts tablespace general_ts1 as  select * from test ;
ERROR 1786 (HY000): Statement violates GTID consistency: CREATE TABLE ... SELECT.

我们换一个姿势,创建一个表指定表空间。

create table test_ts (id int,name varchar(30)) tablespace general_ts1;
Query OK, 0 rows affected (0.04 sec)查看表的建表语句就可以看得很清楚了。

> show create table test_ts;
| test_ts | CREATE TABLE `test_ts` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(30) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

我们来对比测试一下,重新指定一个表users,大概有80多万的数据量。

> select count(*)from users;
+----------+
| count(*) |
+----------+
|   817975 |
+----------+

可以看到在修改前的表usres是存在两个独立的文件。

-rw-r----- 1 mysql mysql       8606 Dec  4 22:48 users.frm
-rw-r----- 1 mysql mysql   41943040 Dec  4 22:48 users.ibd

使用alter语句来修改,整个过程很快

> alter table users tablespace general_ts1;
Query OK, 0 rows affected (1.87 sec)
Records: 0  Duplicates: 0  Warnings: 0

这个时候目录下只存在一个定义文件了,数据都放到新建的表空间了。

-rw-r----- 1 mysql mysql       8606 Jan  4 22:46 users.frm

我们简单解析一下这个定义文件,看看内容和原来有什么差别,可以看到有了新的表空间的标识。

# strings users.frm
PRIMARY
InnoDB
general_ts1
)                                        
user_id
user_name
user_id
user_name

原本空白的数据文件马上就有了数据。

-rw-r----- 1 mysql mysql   41943040 Jan  4 22:46 general_ts1_01.ibd

如果我们修改表空间为独立表空间的方式,也是可以的。

> ALTER TABLE users TABLESPACE=innodb_file_per_table;
Query OK, 0 rows affected (2.17 sec)
Records: 0  Duplicates: 0  Warnings: 0

有一个差别就是建表DDL和原来的格式就不大一样了。

> show create table users;
| users | CREATE TABLE `users` (
  `user_id` int(11) unsigned NOT NULL,
  `user_name` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

修改完成后.ibd文件会重新生成。

如果要查看表空间的信息,在使用general tablespace的情况下查看数据字典就会有一些差别。比如数据库test下存在一个表users,在视图INNODB_SYS_TABLESPACES中是只能看到表空间的基础定义信息,general_ts1而找不到users的字样。

上述就是小编为大家分享的MySQL 5.7如何创建一个表空间了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 5.7如何创建一个表空间

本文链接: https://www.lsjlt.com/news/66387.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL 5.7如何创建一个表空间
    这期内容当中小编将会给大家带来有关MySQL 5.7如何创建一个表空间,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 MySQL里面的文件蛮有意思,之前大体有两个参数来...
    99+
    2024-04-02
  • mysql如何创建一个表
    这篇文章给大家分享的是有关mysql如何创建一个表的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。1.登陆成功后,首先进入某一个数据库 (不是指数据库服务器)use t1; //...
    99+
    2024-04-02
  • navicat如何创建表空间
    navicat 中创建表空间的步骤:连接到数据库并导航到“表空间”。右键单击“表空间”文件夹并选择“新建”>“表空间”。在“表空间”对话框中指定表空间名称、添加数据文件并配置其他设...
    99+
    2024-04-24
    navicat
  • mysql如何给表创建一个分区
    在MySQL中,可以使用CREATE TABLE语句来创建一个分区表。以下是一个示例: CREATE TABLE employee ...
    99+
    2024-04-20
    mysql
  • Oracle如何创建新undo表空间
    这篇文章主要介绍Oracle如何创建新undo表空间,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在处理一则ORA-600 [4194]案例时,参考MOS文档:Step by ste...
    99+
    2024-04-02
  • mysql 根据一个表创建另一个表
    可以使用以下语法来根据一个表创建另一个表: CREATE TABLE new_table_nameAS SELECT * FROM old_table_name; 这将会复制旧表中的所有行和列到新表中。可以在创建新表时增加筛选条件或...
    99+
    2023-10-18
    mysql 数据库
  • oracle如何创建用户和表空间
    要在Oracle数据库中创建用户和表空间,您需要具有适当的权限。以下是创建用户和表空间的步骤: 创建表空间: CREATE TA...
    99+
    2024-04-09
    oracle
  • 如何搭建一个SSM空间
    这篇文章给大家介绍如何搭建一个SSM空间,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。第一章:搭建整合环境1. 搭建整合环境整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式整合的思路2.1. 先搭...
    99+
    2023-06-14
  • oracle如何创建实例、建库、建表、扩展表空间
    这篇文章主要介绍oracle如何创建实例、建库、建表、扩展表空间,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!版本:oracle 11g 一、创建实例(详细参考:http:...
    99+
    2024-04-02
  • python如何创建一个空字典
    Python中可以使用两种方式来创建一个空字典:1. 使用花括号{}来创建一个空字典:```pythonempty_dict = {...
    99+
    2023-09-13
    python
  • es6如何创建一个空对象
    这篇文章给大家分享的是有关es6如何创建一个空对象的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。创建一个空对象有时我们需要创建一个纯净的对象, 不包含什么原型链等等. 一般创建空...
    99+
    2024-04-02
  • oracle如何创建用户指定表空间
    要在Oracle中创建一个用户并指定表空间,可以按照以下步骤进行操作:1. 以具有适当权限的用户登录到Oracle数据库。2. 使用...
    99+
    2023-08-23
    oracle
  • Oracle RAC如何创建表空间和用户
    这篇文章主要介绍Oracle RAC如何创建表空间和用户,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 创建表空间:create tablespace ...
    99+
    2024-04-02
  • MySQL 5.7临时表空间的使用方法
    这篇文章将为大家详细讲解有关MySQL 5.7临时表空间的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。导读MySQL 5.7的目标是成为发布以来最安全的MySQ...
    99+
    2024-04-02
  • mysql中怎么创建一个表
    在 mysql 中创建表格,使用 create table 语句,语法为:create table table_name (column_name data_type [constrai...
    99+
    2024-04-14
    mysql
  • oracle怎么创建表空间
    要在Oracle中创建表空间,可以使用CREATE TABLESPACE语句。以下是创建表空间的步骤:1. 使用SYSDBA权限登录...
    99+
    2023-08-18
    oracle
  • postgresql怎么创建表空间
    要在PostgreSQL中创建表空间,可以按照以下步骤操作: 打开PostgreSQL客户端工具,如psql或pgAdmin。 ...
    99+
    2024-04-17
    postgresql
  • plsql怎么创建表空间
    在PL/SQL中,可以使用以下语法创建表空间: CREATE TABLESPACE tablespace_name DATAFILE...
    99+
    2024-02-29
    plsql
  • mysql如何创建一个视图
    要创建一个视图,可以使用以下语法: CREATE VIEW view_name AS SELECT column1, col...
    99+
    2024-04-20
    mysql
  • 如何在redis中创建一个表
    在redis中创建一个表的方法:在DMS for Data Lake Analytics中创建表dla_person_csv,代码示例:CREATE EXTERNAL TABLE dla_person_csv (id int,name va...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作