MySQL搞清什么是分区表?什么是临时表?

什么是分区表?什么是临时表?下面本篇文章带大家了解一下mysql中的分区表和临时表,希望对大家有所帮助!

MySQL搞清什么是分区表?什么是临时表?

临时表

MySQL中有一种表叫做临时表,指的是用CREATE TEMPORARY TABLE语句创建的,它是一种特殊类型的表,它允许存储临时结果,可以在单个会话中多次重复使用,对其他连接是不可见的,当连接中断后,数据表就会丢失,但也可以使用DROP TABLE在不需要它的情况下显式删除。【相关推荐:mysql视频教程】

CREATE TEMPORARY TABLE table_name( column_1_definition, column_2_definition,....);

如果想要创建一个与现有表结构相同的临时表,使用CREATE TEMPORARY TABLE语句那就太麻烦了,可以使用下面语句

CREATE TEMPORARY TABLE temp_table_name SELECT * FROM table_name LIMIT 0;

还有一个特点是,临时表可以与其他表具有相同的名称,例如即使数据库中存在user的表,但也可以在数据库中创建user的临时表。

创建临时表示例

创建一个名为tblemployee的新临时表,此时使用SHOW TABLES是无法看到这张表的。

create temporary table tblemployee(id int auto_increment Primary key,emp_name varchar(500),emp_address varchar(500),emp_dept_id int)

向其插入数据。

mysql> insert into tblemployee values(1,'张三','北京',2);Query OK, 1 row affected (0.00 sec)mysql> select * from tblemployee;+----+----------+-------------+-------------+| id | emp_name | emp_address | emp_dept_id |+----+----------+-------------+-------------+|  1 | 张三     | 北京        |           2 |+----+----------+-------------+-------------+1 row in set (0.01 sec)mysql>

基于现有表结构创建

首先创建两个表。

create table tb_user(user_name varchar(255),user_id int(11));insert tb_user values("张三",1);insert tb_user values("李四",2);insert tb_user values("王五",3);create table balance(user_id int(11),balance decimal(5,2));insert balance values(1,200);insert balance values(2,150);insert balance values(3,100);

创建一个具有姓名和余额的临时表

create temporary table temp_user_balance select user_name,balance from tb_user left join balance on tb_user.user_id=balance.user_id;

查看临时表中数据。

mysql> select * from temp_user_balance;+-----------+---------+| user_name | balance |+-----------+---------+| 张三      |  200.00 || 李四      |  150.00 || 王五      |  100.00 |+-----------+---------+3 rows in set (0.00 sec)

但是当其他会话查看这个表时,会报错。

mysql> select * from temp_user_balance;ERROR 1146 (42S02): Table 'test.temp_user_balance' doesn't existmysql>

删除临时表

DROP TEMPORARY TABLE table_name;

分区表

MySQL在5.1的时候开始支持分区功能,分区指的是根据一定规则,把同一张表中不同行的记录分配到不同的物理文件中,每个区都是独立的,可以独立处理,也可以作为表的一部分处理,分区对应用来说是透明的,不会影响业务。

MySQL只支持水平分区,不支持垂直分区,水平分区是将同一张表不同行的记录分配到不同的物理文件中,而垂直分区指将同一张表的不同列记录分配到不同的物理文件中。

可以通过SHOW PLUGINS命令来查看MySQL是否启用了分区功能。

MySQL在创建分区的时候使用partition by语句定义每个分区存放的数据,在查询的时候,优化器会根据分区定义过滤那些没有我们需要数据的分区,这样查询的时候就不用扫描所有分区,提高效率。

分区类型

RANGE分区

他是一种基于一个连续区间范围,把数据分配到不同的分区,是最常用的一种分区类型,下面创建一个以id列区间的分区表。

create table user(id int(11),user_name varchar(255))partition by range(id)(partition user0 values less than (100),partition user1 values less than (200));

创建这个表后,表不再由一个ibd组成,而是由建立时候各个分区的ibd组成,可以先通过下面语句查看data目录位置,然后查看被分区后创建的ibd。

show global variables like "%datadir%"+---------------+-----------------+| Variable_name | Value           |+---------------+-----------------+| datadir       | /var/lib/mysql/ |+---------------+-----------------+1 row in set (0.00 sec)
root@hxl-PC:/var/lib/mysql/test# lsuser#p#user0.ibd  user#p#user1.ibdroot@hxl-PC:/var/lib/mysql/test#

然后我们向里面插入3条数据,但是可以看到第三条id为250的却报错了,原因是要插入一个在分区没有定义的值,MySQL则抛出异常。

mysql> insert user values(50,"张三");Query OK, 1 row affected (0.01 sec)mysql> insert user values(150,"张三");Query OK, 1 row affected (0.01 sec)mysql> insert user values(250,"张三");ERROR 1526 (HY000): Table has no partition for value 250mysql>

解决办法是添加一个MAXXXVALUE值的分区,让大于200的值全存放在这里面,这下就可以插入大于200的值了。

alter table user add partition (partition user3 values less than maxvalue);mysql> insert user values(250,"张三");Query OK, 1 row affected (0.02 sec)

可以通过下面语句查询PARTITIONS表下得到每个分区具体信息。

select * from information_schema.partitions where table_schema=database() and table_name='user'G;

由于现在三个分区,所以会出现三个row,每个row中的TABLE_ROWS表示存放的数量,故现在都是1,还有PARTITION_METHOD表示分区类型。

.....*************************** 1. row ***************************             PARTITION_METHOD: RANGE          SUBPARTITION_METHOD: NULL         PARTITION_EXPRESSION: `id`      SUBPARTITION_EXPRESSION: NULL        PARTITION_DESCRIPTION: 100                   TABLE_ROWS: 1.....

也可以使用explain 查看查询时候使用了哪个分区。

LIST分区

LIST分区类似于RANGE,只是分区列的值只能存放特定的,就是一个枚举列表的值的集合。而RANGE是连续区间值的集合

create table user (id int(11)) partition by list(id)(partition user0 values in(1,3,5,7,9),partition user1 values in(0,2,4,6,8));

同样插入一些数据,可以看到插入10的时候抛出异常,原因也是插入的数据不再分区定义中。

mysql> insert user values(1);Query OK, 1 row affected (0.02 sec)mysql> insert user values(2);Query OK, 1 row affected (0.01 sec)mysql> insert user values(6);Query OK, 1 row affected (0.02 sec)mysql> insert user values(9);Query OK, 1 row affected (0.01 sec)mysql> insert user values(10);ERROR 1526 (HY000): Table has no partition for value 10mysql>

而其余1、2、6、9在user0、user1两个分区中各两条。

HASH分区

HASH的目的是将数据均匀的分布到定义的各个分区中,保证各个分区的数据量大致都是一样的, HASH分区没有向RANGE和LIST一样必须规定某个值在哪个分区中保存,HASH分区是自动完成的,我们只需要指定分区数量即可。

create table user (id int(11)) partition by hash(id) partitions 4;

那如何得知这个数据在哪个分区中存储呢,拿500来说,就是通过mod(500,分区数量)来得到,所以500在第1个分区中。

mysql> select mod(500,4)    -> ;+------------+| mod(500,4) |+------------+|          0 |+------------+

在比如31,那么mod(31,4)就是3,所以在第4个分区中,如果把这两个数插入进去,通过information_schema.partitions查看,那么1、4分区的TABLE_ROWS都为1。

通过条件查找数据时,使用到的分区也不一样,比如查找相等的数,那么首先计算这个值应该在哪个分区,然后在进行查找,如果使用来范围查找,则会使用所有分区。

还有HASH可以使用一些函数或其他有效表达式,比如创建时可以使用partition by hash(abs(id)),但并不是所有函数都可以使用,可使用的函数可以参考官网 ;

KEY分区

Key分区和HASH类似,不同的是, HASH 分区允许使用用户自定义的表达式,KEY 分区不允许使用用户自定义的表达式,需要使用 HASH 函数

KEY分区允许多列,而HASH分区只允许一列,另外在有主键或者唯一键的情况下,key中分区列可不指定,默认为主键或者唯一键,如果没有,则必须显性指定列。

create table user(id int(11)) partition by key(id) partitions 4;

但是我并没有找到关于详细分区介绍的算法,而是看到一些说通过PASSWORD的运算,没有搞懂。

Columns分区

Columns分区是5.5引入的分区类型,在此之前,RANGE分区和LIST分区只能支持整数分区,从而需要额外的函数来计算,Columns分区解决了这个问题。

Columns分区可以细分为RANGE Columns 和LIST Columns分区,支持的类型如下:

TINYINT、 SMALLINT、 MEDIUMINT、 INT ( INTEGER) 和 BIGINT,但是不支持DECIMAL或 FLOAT。

DATE和 DATETIME。

CHAR, VARCHAR, BINARY,和 VARBINARY,TEXT和 BLOB列不支持。

create table user (    a int,    b int)partition by range columns(a, b) (    partition p0 values less than (5, 12),    partition p1 values less than (maxvalue, maxvalue));

现在插入一些数据

insert into user (a,b) values (4,11);insert into user (a,b) values (6,13);

第一条由于(4,11) < (5,12) 所以在p0分区,而(6,13) < (5,12) ,超出预期,在p1分区。

子分区

子分区也称为复合分区,可以对分区表RANGE和LIST上分区再进分区。

create table user (id int, purchased date)    partition by range( year(purchased) )    subpartition by hash( to_days(purchased) )    subpartitions 2 (        partition p0 values less than (1990),        partition p1 values less than (2000),        partition p2 values less than maxvalue);

对NULL的处理

MySQL可以在分区键上使用NULL,会把他当做最小分区来处理,也就是会存放到第一个分区,但是在List分区中,NULL值必须定义在列表中,否则不能被插入。

更多编程相关知识,请访问:编程视频!!

以上就是MySQL搞清什么是分区表?什么是临时表?的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Laravel中的用户管理和权限控制:实现多用户和角色分配
上一篇 2026年9月4日 20:07:41
PS Plus七月移除游戏名单公布:《消光2》《骑砍2》等
下一篇 2026年9月4日 20:11:43

相关推荐

  • mysql怎么使用全文索引 mysql创建全文索引的配置方法

    mysql怎么使用全文索引 mysql创建全文索引的配置方法mysql怎么使用全文索引 mysql创建全文索引的配置方法mysql怎么使用全文索引 mysql创建全文索引的配置方法mysql怎么使用全文索引 mysql创建全文索引的配置方法

    mysql使用全文索引的核心是让数据库像搜索引擎一样理解并高效检索文本内容。1. 创建全文索引:可在建表时或之后通过alter table语句为char、varchar或text字段添加fulltext索引;2. 使用match against查询:支持自然语言模式(自动过滤停用词并按相关性排序)和…

    2026年9月22日 用户投稿
    100
  • 如何设置Linux服务超时参数 systemd服务超时配置

    如何设置Linux服务超时参数 systemd服务超时配置如何设置Linux服务超时参数 systemd服务超时配置如何设置Linux服务超时参数 systemd服务超时配置如何设置Linux服务超时参数 systemd服务超时配置

    systemd服务超时参数调整方法包括:1.使用systemctl show查看timeoutstartsec、timeoutstopsec、timeoutsec字段获取当前配置;2.通过systemctl edit编辑unit文件设置timeoutstartsec、timeoutstopsec或t…

    2026年9月22日 用户投稿
    000
  • mysql安装完如何诊断 mysql慢查询分析与优化方法

    要解决 mysql 慢查询问题,首先要开启慢查询日志,其次使用 mysqldumpslow 分析日志,再通过 explain 查看执行计划,最后根据常见优化建议改进 sql 和索引。具体步骤如下:一、修改配置文件或动态开启慢查询日志,并设置阈值和路径;二、使用 mysqldumpslow 工具分析慢…

    2026年9月22日
    100
  • PHP如何实现视频留言评论_PHP实现视频留言评论功能

    答案:通过数据库设计、前端表单、后端处理和评论展示四步实现PHP视频留言功能。1. 创建comments表存储信息;2. 构建表单提交昵称与评论;3. 用add_comment.php接收并存入数据库;4. 在页面读取并安全输出评论,防止XSS。 要实现视频留言评论功能,PHP可以结合前端页面、数据…

    2026年9月22日
    000
  • mysql安装后怎么建表 mysql创建数据表的详细步骤

    mysql安装后怎么建表 mysql创建数据表的详细步骤mysql安装后怎么建表 mysql创建数据表的详细步骤mysql安装后怎么建表 mysql创建数据表的详细步骤mysql安装后怎么建表 mysql创建数据表的详细步骤

    安装完 mysql 后,建表的关键在于先创建数据库并选择使用,然后通过 create table 语句定义表结构。1. 创建数据库:使用 create database mydatabase; 创建数据库;2. 使用数据库:通过 use mydatabase; 选择当前操作的数据库;3. 建表语法:…

    2026年9月22日 用户投稿
    200
  • mysql如何输入变量值 mysql交互式代码输入步骤详解

    mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解mysql如何输入变量值 mysql交互式代码输入步骤详解

    在mysql命令行中交互式输入变量值可通过预处理语句或用户自定义变量实现。1. 使用预处理语句时,先用prepare定义含占位符的sql语句,再通过set设置变量值,最后用execute执行并传参,完成后需deallocate释放资源;2. 使用用户自定义变量时,直接通过set赋值并在sql语句中引…

    2026年9月22日 用户投稿
    100
  • mysql安装完成如何卸载 mysql完全删除数据库的方法

    mysql安装完成如何卸载 mysql完全删除数据库的方法mysql安装完成如何卸载 mysql完全删除数据库的方法mysql安装完成如何卸载 mysql完全删除数据库的方法mysql安装完成如何卸载 mysql完全删除数据库的方法

    彻底卸载mysql需多步骤操作一、停止并卸载服务:windows执行net stop mysql和mysqld –remove,linux用systemctl stop mysql并卸载软件包二、手动删除数据和配置文件:包括数据目录/var/lib/mysql、配置文件/etc/mysq…

    2026年9月22日 用户投稿
    100
  • 如何在mysql中监控用户操作日志

    MySQL默认不记录用户操作日志,但可通过启用通用查询日志记录所有SQL操作,或使用二进制日志追踪数据变更,也可部署审计插件实现细粒度监控,结合独立账号管理和日志轮转策略提升安全性与可追溯性。 MySQL 本身不默认记录用户的所有操作日志,但可以通过启用特定的日志功能来实现对用户行为的监控。以下是几…

    2026年9月22日
    100
  • mysql安装完如何连接 mysql安装后的客户端使用教程

    mysql安装完如何连接 mysql安装后的客户端使用教程mysql安装完如何连接 mysql安装后的客户端使用教程mysql安装完如何连接 mysql安装后的客户端使用教程mysql安装完如何连接 mysql安装后的客户端使用教程

    连接mysql的方法包括命令行连接本地数据库、配置远程访问权限、使用图形化工具及排查连接问题。1. 使用命令行输入mysql -u root -p并输入密码登录,若未设密码可省略-p;2. 创建远程用户并授权:create user ‘newuser’@’%&#8…

    2026年9月22日 用户投稿
    400
  • mysql如何输入多行语句 mysql命令行写sql代码技巧

    mysql如何输入多行语句 mysql命令行写sql代码技巧mysql如何输入多行语句 mysql命令行写sql代码技巧mysql如何输入多行语句 mysql命令行写sql代码技巧mysql如何输入多行语句 mysql命令行写sql代码技巧

    在mysql命令行中输入多行语句时,需注意以下要点:1. 多行语句不应在中间行使用分号结束,只有在最后一行加上分号后,mysql才会执行整个语句;2. 若输入过程中未完成语句,mysql会显示 -> 提示符,此时可继续输入;3. 可使用 c 命令取消当前语句的输入;4. 为提高可读性,建议使用…

    2026年9月22日 用户投稿
    000
  • 利用HTML数组输入在PHP中处理多次表单提交

    本教程详细介绍了如何在同一页面通过php处理多次表单提交,同时避免数据覆盖,实现数据的累加显示。核心方法是利用html的数组输入(`name=”fieldname[]”`)来收集多个值,并通过隐藏字段(`hidden` inputs)在每次提交时保留并传递历史数据,最终在ph…

    2026年9月22日
    300
  • MySQL安装时端口冲突如何解决?

    MySQL安装时端口冲突如何解决?MySQL安装时端口冲突如何解决?MySQL安装时端口冲突如何解决?MySQL安装时端口冲突如何解决?

    mysql安装时3306端口冲突的解决方法有两类:1.修改mysql默认端口;2.找出并停止占用端口的进程。在安装过程中可通过mysql安装向导直接修改端口号,或安装后编辑配置文件my.ini(windows)或my.cnf(linux)中的port参数,并重启mysql服务生效。若确认3306应为…

    2026年9月22日 用户投稿
    900
  • mysql安装完成如何缓存 mysql查询缓存设置与优化

    mysql安装完成如何缓存 mysql查询缓存设置与优化mysql安装完成如何缓存 mysql查询缓存设置与优化mysql安装完成如何缓存 mysql查询缓存设置与优化mysql安装完成如何缓存 mysql查询缓存设置与优化

    mysql 5.7 及更早版本支持查询缓存,可通过配置 query_cache_type、query_cache_size 和 query_cache_limit 开启并优化缓存效果。首先确认 mysql 版本是否支持查询缓存,若为 5.7 或更低版本,可在配置文件中设置 query_cache_t…

    2026年9月22日 用户投稿
    400
  • mysql怎么执行sql命令 mysql输入代码创建表详细步骤

    mysql怎么执行sql命令 mysql输入代码创建表详细步骤mysql怎么执行sql命令 mysql输入代码创建表详细步骤mysql怎么执行sql命令 mysql输入代码创建表详细步骤mysql怎么执行sql命令 mysql输入代码创建表详细步骤

    在mysql中执行sql并创建表的步骤如下:1.通过命令行或图形工具连接数据库,使用mysql -u 用户名 -p并输入密码登录;2.选择或创建数据库,用use database_name或create database语句;3.使用create table定义表结构,如字段名、数据类型、约束等,例…

    2026年9月22日 用户投稿
    300
  • MySQL安装后初始密码在哪里查看?

    MySQL安装后初始密码在哪里查看?MySQL安装后初始密码在哪里查看?MySQL安装后初始密码在哪里查看?MySQL安装后初始密码在哪里查看?

    mysql安装后的初始密码取决于安装方式和操作系统,通常可在错误日志中找到。1. 查看mysql错误日志:linux系统使用grep命令查找/var/log/mysqld.log或类似路径;windows系统在data目录下的hostname.err中搜索“temporary password”。2…

    2026年9月22日 用户投稿
    200
  • mysql如何添加主键索引 mysql创建主键索引的步骤详解

    mysql如何添加主键索引 mysql创建主键索引的步骤详解mysql如何添加主键索引 mysql创建主键索引的步骤详解mysql如何添加主键索引 mysql创建主键索引的步骤详解mysql如何添加主键索引 mysql创建主键索引的步骤详解

    mysql中添加主键索引主要有三种方式:1. 创建新表时直接添加主键,可在列定义后使用primary key或在所有列定义后单独声明;2. 在已有表上通过alter table添加主键,需确保目标列非空且唯一,必要时先清洗数据;3. 添加复合主键,适用于多列组合才能唯一标识记录的情况。主键索引在in…

    2026年9月22日 用户投稿
    100
  • 如何在mysql中开发库存盘点管理项目

    答案是设计合理的数据库结构并实现业务逻辑以确保库存数据准确。首先建立商品、仓库、库存、盘点单及明细表,通过外键关联保证数据完整性;接着实现创建盘点任务、加载系统库存、录入实际数量、计算差异并更新库存的流程,使用事务确保操作原子性;最后提供差异查询与报表功能,支持管理决策,从而构建稳定可靠的库存盘点系…

    2026年9月22日
    200
  • MySQL最新版本如何下载?官方下载指南

    MySQL最新版本如何下载?官方下载指南MySQL最新版本如何下载?官方下载指南MySQL最新版本如何下载?官方下载指南MySQL最新版本如何下载?官方下载指南

    要下载mysql,推荐从官网直接下载;选择社区版或商业版取决于用途;下载时需选对操作系统和版本;安装遇到问题可查错误提示并搜索解决方案;验证安装成功可用命令行登录。下载步骤包括访问官网、选择版本与操作系统、使用installer、注册账号、开始下载安装。安装后配置root密码、字符集等。验证方式为命…

    2026年9月22日 用户投稿
    300
  • Flyway多数据库与CI/CD测试集成策略

    本文深入探讨了在CI/CD流程中,如何高效地配置Flyway以管理多数据库环境下的迁移,尤其关注集成测试场景。我们将比较使用真实数据库服务、Testcontainers以及Flyway自身多数据库配置的优劣,并提供关于分离生产与测试环境迁移脚本的实用策略,旨在确保开发、测试与生产环境的数据一致性与流…

    2026年9月22日
    200
  • mysql安装后怎么维护 mysql日常维护操作大全

    mysql安装后怎么维护 mysql日常维护操作大全mysql安装后怎么维护 mysql日常维护操作大全mysql安装后怎么维护 mysql日常维护操作大全mysql安装后怎么维护 mysql日常维护操作大全

    开启并分析慢查询日志以优化 sql 性能;2. 定期使用逻辑或物理方式备份数据并异地存储;3. 监控连接数和服务器资源,防止资源耗尽;4. 定期执行 analyze、optimize 和 check 表操作以维护表健康;5. 合理管理日志配置与清理策略。mysql 安装后的日常维护主要包括慢查询监控…

    2026年9月22日 用户投稿
    200

发表回复

登录后才能评论
关注微信