大数据修改 表结构 数据库名称
比如数据库名称old_db想改名为new_db,通过修改表名称,间接实现修改数据库名称使用此方法实际上将所有表从一个数据库移动到另一个数据库,这实际上重命名了该数据库(MySQL没有单个语句的操作),移动后原始数据库继续存在,但是里面没有表。create database new_db;rename table old_db.tb to new_db.tb;drop database old_db
·
大数据表结构修改
随着业务的发展。某些业务表会达到很高的量级。这时候某些业务如果牵扯到修改数据结构,就不是简单的alter table
能搞定的事情了。
复制一个新表,表结构跟老表一摸一样
create table user_new like user;
修改表结构(这里以增加字段为例)
alter table user_new add column `status` tinyint(8) DEFAULT NULL;
同时交换两个表的表名(user,user_new)
rename table user to user_old,user_new to user;
注意:这时业务数据会写到复制的空表里面,因为结构是一致的,所有新入库的数据ID是老表MAX(ID)+1自增不会和老表冲突,带ID复制旧数据也不会冲突。 拷贝数据从旧数据 最大的id 倒叙插入 就没问题了。
拷贝数据
insert into user select * from user_old
如果数据量较大,可以使用条件语句,分批拷贝(这里以id为例,一般都以create_time为条件)
insert into user_new (id, is_delete, type) select id, is_delete, type from user where id>100000
比对结果数据相同后,删除旧表(假设旧表最大ID=489521567)
SELECT count(*) from user_old limit 1;
SELECT count(*) from user where id<=489521567 limit 1;
快速修改MySQL数据库名称
比如数据库名称old_db
想改名为new_db,
通过修改表名称,间接实现修改数据库名称
使用此方法实际上将所有表从一个数据库移动到另一个数据库,这实际上重命名了该数据库(MySQL没有单个语句的操作),移动后原始数据库继续存在,但是里面没有表。
create database new_db;
rename table old_db.tb to new_db.tb;
drop database old_db;
如何使用shell
脚本来批量修改表名:
- 当库下表比较多的时候,用上面方法纯手动也不现实,好在
linux
下可以用shell
脚本来批处理。 - 附上一个
shell
脚本批量修改表名称。
#!/bin/bash
mysql -uroot -p123456 -e 'create database if not exists new_db;'
list_table=$(mysql -uroot -p123456 -Nse "select table_name from information_schema.TABLES where TABLE_SCHEMA='old_db'")
for table in $list_table
do
mysql -uroot -p123456 -e "rename table old_db.$table to new_db.$table"
done
mysql
登陆命令行参数
- -e, --execute=name # 执行mysql的sql语句
- -N, --skip-column-names # 不显示列信息
- -s, --silent # 一行一行输出,中间有tab分隔
更多推荐
已为社区贡献1条内容
所有评论(0)