mysql复制表修改数据类型_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);

合并插入的优点:

减轻日志的负担 --- 减少了redolog和binlog,降低了日志刷新磁盘的频率和数据量

减少了sql解析次数

降低网络传输I\O

重命名

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

检查mysql

show variables like ‘character%’;

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

检查数据库

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,那我们的数据表应该不会自动改

数据表

修改默认字符集

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值