zoukankan      html  css  js  c++  java
  • MySQL 创建表 复制表结构的两种方法 插入相同数据 重命名表 排查并修改字符集

    MySQL 创建表 复制表结构的两种方法 插入相同数据 重命名表 排查并修改字符集

     

    中位数简单案例数据准备

    这里是我为中位数简单案例准备数据的过程,过程中也回顾下一些命令的使用

     

    创建表(奇数个)

    create table `median_test` (`id` int unsigned auto_increment, `marks` int not null, primary key(`id`));
    	
    insert into median_test (marks) values (66);
    insert into median_test (marks) values (90);
    insert into median_test (marks) values (100);
    
    # 也可以使用批量插入
    insert into median_test (marks) values (66),(90),(100);
    

    合并插入的优点:

    1. 减轻日志的负担 --- 减少了redolog和binlog,降低了日志刷新磁盘的频率和数据量
    2. 减少了sql解析次数
    3. 降低网络传输IO

     

     

    重命名

    rename table `median_test` to `median_odd`;
    

     

    复制表

    方式一:

    create table `median_even` like `median_odd`
    

    (Mysql5之后支持)

    方式二:

    show create table median_odd;
    
    +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | Table       | Create Table                                                                                                                                                                           |
    +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    | median_odd | CREATE TABLE `median_odd` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `marks` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 |
    +-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    这就是为什么我要写修改表字符集的原因了 --- Latin1?怎么能忍!要统治世界的可是utf8

    (从上面的语句我们也可以看到官方默认的直接指定字符集的形式为DEFAULT CHARSET

    处理过程:

    因为mysql、数据库、数据表,每一级都会设定字符集,除非你在创建时直接指定字符集,否则它使用默认值。因此从最顶层开始,一级一级检查为妙

    1. 检查mysql
    show variables like ‘character%’;
    

    (如果你的未修改为utf8,详见这里

    1. 检查数据库
    show create database test
    
    +----------+-----------------------------------------------------------------+
    | Database | Create Database                                                 |
    +----------+-----------------------------------------------------------------+
    | test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |
    +----------+-----------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    哦,在这里我们发现问题所在了,先治本:

    alter database test default character set utf8;
    

    检查一下:

    +----------+-----------------------------------------------------------------+
    | Database | Create Database                                                 |
    +----------+-----------------------------------------------------------------+
    | test     | CREATE DATABASE `test` /*!40100 DEFAULT CHARACTER SET latin1 */ |
    +----------+-----------------------------------------------------------------+
    1 row in set (0.00 sec)
    

    ok,那我们的数据表应该不会自动改

    1. 数据表

    修改默认字符集

    alter table median_odd default charset utf8 collate utf8_general_ci;
    

    修改默认字符集并修改所有已有字段的字符集:

    alter table median_odd convert to charset utf8 collate utf8_general_ci;
    

     

    复制(批量插入)数据:

    insert into median_even select * from median_odd;
    

     

    最终数据结果为:

    mysql> select * from median_even;
    +----+-------+
    | id | marks |
    +----+-------+
    |  1 |    66 |
    |  3 |   100 |
    |  4 |    95 |
    |  5 |    80 |
    +----+-------+
    4 rows in set (0.00 sec)
    
    mysql> select * from median_odd;
    +----+-------+
    | id | marks |
    +----+-------+
    |  1 |    66 |
    |  2 |    90 |
    |  3 |   100 |
    +----+-------+
    3 rows in set (0.00 sec)
    

     

    补充

    补充一种复制表结构并复制全部记录的命令

    create table table_name as select * from ano_table_name;
    

     

  • 相关阅读:
    luogu P5494 【模板】线段树分裂
    珂朵莉树(ODT)
    luogu P5787 二分图 /【模板】线段树分治
    线段树
    luogu P1450 [HAOI2008]硬币购物
    树形DP
    luogu P3047 [USACO12FEB]Nearby Cows G
    1069: 向Z同学学习
    1067: 有问题的里程表
    1066: 字符分类统计
  • 原文地址:https://www.cnblogs.com/G-Aurora/p/13485181.html
Copyright © 2011-2022 走看看