zoukankan      html  css  js  c++  java
  • MySQL create table as与create table like对比

    MySQL中表的克隆有多种,常用的是create table as和create table like,两者有所差别。

    ① reate table as  只能部分克隆表结构,但完整保留数据

    ② create table like会完整地克隆表结构,但不会插入数据,需要单独使用insert into或load data方式加载数据

    1.准备工作

    先准备一些测试数据:

    CREATE TABLE `user` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
      `user_name` varchar(200) DEFAULT '',
      `phone` varchar(200) DEFAULT '',
      `b_code` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
    INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (1, '李明', '101', '2021001');
    INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (2, '赵慧', '456', '2020001');
    INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (3, '李凯', '123', '2021002');
    INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (6, '张三1', '123', '2022001');
    INSERT INTO `db2020`.`user`(`id`, `user_name`, `phone`, `b_code`) VALUES (7, '张三2', '123', '2021003');

    查询表说明如下:

    desc user;

    查询的结果如下:

    select * from user

    2.create table as

    使用create table as复制表:

    create table user_bk as select * from user;

    1)查询表数据:

    select * from user_bk

    2)查询表说明:

    desc user_bk

     会发现数据可完整的复制过来,但主键、自动递增和索引丢失了。

    上述复制的全部的数据,当然也可以只复制部分数据,在后面添加where条件即可

    create table user_bk as select * from user where b_code like '2021%';

    对于5.6及以上的版本内,MySQL默认开启了 enforce_gtid_consistency=true 功能,若不关闭,则会出现下面的错误:

    Statement violates GTID consistency

    关闭的命令:

    SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY = off;

    3.create table like

    使用create table like复制表:

    create table user_bk2 like user;

    1)查询表数据:

    select * from user_bk2

    2)查询表说明:

    desc user_bk

     会发现数据结构可完整的复制过来,但没有数据。

    3)解决方案

    若想完整的复制表结构和数据,只能使用like这种方式。先复制表结构,然后使用insert into复制数据过来。

    create table user_bk3 like user;
    insert into user_bk3  select * from user;

    使用两条语句即可执行表的复制。

    就是这么简单,你学废了吗?感觉有用的话,给笔者点个赞吧 !
  • 相关阅读:
    python---函数补充(变量传递),语句执行顺序(入栈顺序)
    python---基础知识回顾(十)进程和线程(多线程)
    python---方法解析顺序MRO(Method Resolution Order)<以及解决类中super方法>
    FindMe
    Android Studio系列教程五--Gradle命令详解与导入第三方包
    Material Design
    asmack
    AlarmDemo-with-Database
    ZhuGongpu CloudX-for-Android
    SaundProgressBar
  • 原文地址:https://www.cnblogs.com/zys2019/p/15408045.html
Copyright © 2011-2022 走看看