首页 > 数据库 >mysql 快速备份表数据

mysql 快速备份表数据

时间:2023-02-14 10:04:40浏览次数:41  
标签:建表 快速 备份 索引 复制 mysql 数据 主键

1.情景展示

在工作过程中,我们往往会有对表数据进行备份的需求,比如说:对表数据进行大量操作时,为了以防万一,最好是将数据进行备份,以免操作不当,导致无法恢复原有的数据。

2.解决方案

和Oracle的用法一模一样,语法如下:

CREATE TABLE NEW_TALBE_NAME AS SELECT * FROM OLD_TABLE_NAME;

3.实战演练

对表cz_jkdic进行备份。

mysql 快速备份表数据_Navicat

此时,表的数据已经完成了备份,已经产生了一张新表:cz_jkdic_bak;

mysql 快速备份表数据_mysql_02

下面,我们一起来看一下两表的区别:

查看建表语句:SHOW CREATE TABLE TABLE_NAME。

mysql 快速备份表数据_数据_03

create table列展示的就是对应表的建表语句

将cz_jkdic表和cz_jkdic_bak表的建表语句拿出来,进行对比:

mysql 快速备份表数据_表数据_04

我们会发现备份表发生了以下变化:

第一,主键消失(备份表没有指定哪一列是主键);

第二,索引消失(备份表已经不存在索引);

第三,自增消失(因为mysql的自增属性只能和主键绑定)。

第四:字段的非空属性会保留。

如果原表有触发器的话,触发器应该也不会复制过来的;

外键约束同样不会复制。

由此,我们可以下这样的结论:

使用create table 新表名 as select * from 旧表名的方式,能实现的功能:

第一,建表(表的字段列和原表一模一样)(可以理解为:没有指定主键和索引的普通建表语句);

第二,复制数据(将原表数据塞进新表当中)。

仅仅只有这两个作用,一定不要忘了,归根结底是因为:我们用的建表语句没有定义其它内容。

所以说,当我们后续需要对备份表进行复用的时候,需要:

第一,重新指定表主键,避免与原有数据造成主键冲突,导致后续数据插入失败(如果使用自增属性的话,mysql会自动将现有主键列的最大值+1,当作自增的起始值)。

第二,重新建立表索引。

4.另一种实现方式

如果数据量不大的话,可以使用Navicat来实现;

切换到表视图;

mysql 快速备份表数据_数据_05

选中要复制的表,按Ctrl+C进行复制,再按Ctrl+V进行粘贴,就会快速完成表及数据的复制;

而且,复制后的表和原表一模一样,不会造成主键和索引的丢失。

mysql 快速备份表数据_数据_06

mysql 快速备份表数据_mysql_07

2022年5月23日21:01:21

5.清空表数据

只是清空表数据,原有表结构不受影响。

以truncate为例进行说明

mysql 快速备份表数据_mysql_08

第一:表的数据被清空后,表的主键依然存在;

mysql 快速备份表数据_Navicat_09

第二:表自增值不受影响(也就是说:不会被重置为0);

mysql 快速备份表数据_数据_10

第三:索引、外键、触发器等均不受影响。

mysql 快速备份表数据_主键_11

第四:字段的非空属性会保留。

mysql 快速备份表数据_表数据_12

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!



作者:Marydon

标签:建表,快速,备份,索引,复制,mysql,数据,主键
From: https://blog.51cto.com/u_15964717/6055555

相关文章

  • mysql 报错:Every derived table must have its own alias
    1.情景展示使用mysql对派生表查询数据的时候,报错信息如下:Everyderivedtablemusthaveitsownalias使用谷歌翻译成中文:每个派生表都必须有自己的别名。2.具体分析因为习......
  • mysql 获取系统当前时间的3种方式
    1.获取系统当前日期+时间方式一:now()方式二:sysdate()以上两种方式,对应日期类型:datetime。方式三:CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP对应日期类型:timestamp。方式四:to_da......
  • mysql、oracle like查询不走索引的解决方案
    1.情景展示我们知道:无论是mysql还是oracle,只要使用like查询,就可能会面临索引失效(不走索引)的问题;下面,我们将一起来看看什么情况下,索引会失效,以及如何解决不走索引的问题。已......
  • mysql 非空判断(判断字段值是否为空)
    1.情景展示mysql如何判断表字段值是否为空?2.非空判断方式一:表字段+isnotnull方式二:notisnull(表字段)方式三:!isnull(表字段)3.为空判断方式一:表字段+isnull方式二:is......
  • mysql 循环批量建表(表结构相同,表名可以自定义)
    1.情景展示现在有这样一种需求:我需要建两百多张表,这些表的表结构相同,表的名称也是提前拟定好的,必须使用指定的表名;如果使用一个个写SQL语句,那不还得累死,所以,我想到了可不可......
  • mysql limit分页用法讲解
    1.情景展示在Oracle当中,使用rownum来进行分页;而在mysql中,是没有rownum的,需要通过limit来实现。2.用法介绍limit[offset,]rowslimit后面可以跟一个参数,也可以跟两个参数;格式......
  • mysql、oracle 分组查询,每组取一条数据
    1.情景展示有这样一种需求:将数据按照机构进行分组,然后取每个机构下只取一条记录,如何实现?2.mysql分组查询出来某字段,然后和原来的表进行关联查询。方式一:通过内连接来实现查......
  • MySQL 8.0 修改root远程登录【ERROR 1410 (42000): You are not allowed to create a
    MySQL8.0的数据库root用户默认无法远程登录,需要修改root的远程授权,如下:mysql>grantallprivilegeson*.*to'root'@'%';ERROR1410(42000):Youarenotallowed......
  • (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第零节:MYSQL环境安装和表的建立以及
    pdf下载:密码7281专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解目录一:注意事项二:MYSQL环境(1)下载(2)安装(3)MYSQL可视......
  • RabbitMQ 快速入门
    RabbitMQ是一款实现了AMQP协议的消息中间件,使用Erlang编写。这篇博客简单介绍一下RabbitMQ,但不介绍特定库的API核心概念RabbitMQ存在一下概念,清楚了一下概念也......