MySQL表结构/内容的复制


=Start=

缘由:

备份是一个好习惯。线上操作,备份为先。

参考解答:
MySQL表结构的复制
# 完整的将 表tbl_name1 中的字段结构和索引复制到 表tbl_name2 中
create table tbl_name2 like tbl_name1;

# 只复制 表tbl_name1 中的字段结构到 表tbl_name2 中(不复制索引,好处在于比较灵活,可以指定要复制哪些字段)
create table tbl_name2 as select col_a, col_b from tbl_name1 limit 0;

# 先查看 表tbl_name1 中创建语句,然后(改一下表名和AUTO_INCREMENT)再执行一遍以创建 表tbl_name2
show create table tbl_name1;
MySQL表数据的复制
先建表:
SHOW CREATE TABLE `table1`;
CREATE TABLE `table2`(...); # 注意修改 表名 & AUTO_INCREMENT
或
CREATE TABLE `table2` LIKE `table1`;
然后复制数据:
INSERT INTO `table2`(fields you want) SELECT fields you want FROM `table1`;
INSERT INTO `table2` SELECT * FROM `table1`; #将`table1`中的数据复制到`table2`中

实例:
CREATE TABLE `product_backup` LIKE `product_id`;
LOCK TABLES product_backup WRITE;
LOCK TABLES product_id READ;
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id;
UNLOCK TABLES;


复制表结构(不包括索引)+复制数据:
CREATE TABLE `table2` [AS] SELECT * FROM `table1`;

====
建议先导出,再导入:
SELECT * FROM `table1` INTO OUTFILE '/tmp/tbl1.txt';
LOAD DATA INFILE '/tmp/tbl1.txt' INTO TABLE `table2`;

不建议直接插入:
INSERT INTO `table2` SELECT * from `table1`;
参考链接:

=END=

,

《 “MySQL表结构/内容的复制” 》 有 4 条评论

  1. 重置 MySQL 自增列 AUTO_INCREMENT 初始值

    方法一:
    delete from tb1;
    ALTER TABLE tb1 AUTO_INCREMENT = 1;
    (好处,可以设置 AUTO_INCREMENT 为任意值开始。缺点:如果表列和数据很多,速度会很慢)

    方法二:
    truncate tb1;
    (好处,简单,AUTO_INCREMENT 值重新开始计数)

  2. MySQL中如何根据一个表的搜索(select)结果来对另一个表进行插入(insert)操作?
    https://blog.csdn.net/bao19901210/article/details/51992584
    `
    SELECT INTO FROM 语句
      语句形式为:
    select vale1, value2
    into Table2 from Table1;

      要求:目标表 Table2 不存在,因为在插入时会自动创建表 Table2 ,并将 Table1 中指定字段数据复制到 Table2 中。

    INSERT INTO SELECT 语句
      语句形式为:
    insert into Table2 (field1,field2,…)
    select value1,value2,… from Table1;

      要求:目标表 Table2 必须存在,由于目标表 Table2 已经存在,所以我们除了插入源表 Table1 的字段外,还可以插入常量。
    `

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注