MySQL中大数据表增加字段的实现思路
前言
增加字段相信大家应该都不陌生,随手就可以写出来,给 MySQL 一张表加字段执行如下 sql 就可以了:
ALTER TABLE tbl_tpl ADD title(255) DEFAULT '' COMMENT '标题' AFTER id;
但是线上的一张表如果数据量很大呢,执行加字段操作就会锁表,这个过程可能需要很长时间甚至导致服务崩溃,那么这样操作就很有风险了。
那么,给 MySQL 大表加字段的思路如下:
① 创建一个临时的新表,首先复制旧表的结构(包含索引)
create table new_table like old_table;
② 给新表加上新增的字段
③ 把旧表的数据复制过来
insert into new_table(filed1,filed2…) select filed1,filed2,… from old_table
④ 删除旧表,重命名新表的名字为旧表的名字
不过这里需要注意,执行第三步的时候,可能这个过程也需要时间,这个时候有新的数据进来,所以原来的表如果有字段记录了数据的写入时间就最好了,可以找到执行这一步操作之后的数据,并重复导入到新表,直到数据差异很小。不过还是会可能损失极少量的数据。
所以,如果表的数据特别大,同时又要保证数据完整,最好停机操作。
另外的方法:
1.在从库进行加字段操作,然后主从切换
2.使用第三方在线改字段的工具
一般情况下,十几万的数据量,可以直接进行加字段操作。
总结
以上就是关于在MySQL大表中加字段的实现思路,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
相关推荐
-
mysql中向表中某字段追加字符串的方法
Update `表名` SET title = CONCAT(title,'MV') where articleid=3487 and title not like '%v'
-
MySQL命令行中给表添加一个字段(字段名、是否为空、默认值)
先看一下最简单的例子,在test中,添加一个字段,字段名为birth,类型为date类型. mysql> alter table test add column birth date; Query OK, 0 rows affected (0.36 sec) Records: 0 Duplicates: 0 Warnings: 0 查询一下数据,看看结果: mysql> select * from test; +------+--------+-----------------------
-
MYSQL数据库中的现有表增加新字段(列)
复制代码 代码如下: ALTER TABLE `数据库名`.`表名` ADD COLUMN `PROCID` VARCHAR(6) DEFAULT '' AFTER `PPIDChanged`; --在MYSQL中,如果是表名,数据库名,列名,在你增加,修改,更新的时候都需要使用ESC键盘下的重音符号,才可以添加,相应的列名或者更新修改. 当然现在大多都是用phpmyadmin或mysql图形化操作工具,更方法,这样的是临时使用的,或没有图形界面的方法.大家可以使用上述的图形化工具操作. 下面推
-
MySQL 删除大表的性能问题解决方案
微博上讨论MySQL在删除大表engine=innodb(30G+)时,如何减少MySQL hang的时间,现做一下简单总结: 当buffer_pool很大的时候(30G+),由于删除表时,会遍历整个buffer pool来清理数据,会导致MySQL hang住,解决的办法是: 1.当innodb_file_per_table=0的时候,以上不是问题,因为采用共享表空间的时候,该表所占用的空间不会被删除,buffer pool中的相关页不会 被discard. 2.当innodb_file_pe
-
mysql千万级数据大表该如何优化?
1.数据的容量:1-3年内会大概多少条数据,每条数据大概多少字节: 2.数据项:是否有大字段,那些字段的值是否经常被更新: 3.数据查询SQL条件:哪些数据项的列名称经常出现在WHERE.GROUP BY.ORDER BY子句中等: 4.数据更新类SQL条件:有多少列经常出现UPDATE或DELETE 的WHERE子句中: 5.SQL量的统计比,如:SELECT:UPDATE+DELETE:INSERT=多少? 6.预计大表及相关联的SQL,每天总的执行量在何数量级? 7.表中的数据:更新为主的
-
MySQL修改表一次添加多个列(字段)和索引的方法
MySQL修改表一次添加多个列(字段) ALTER TABLE table_name ADD func varchar(50), ADD gene varchar(50), ADD genedetail varchar(50); MySQL修改表一次添加多个索引 ALTER TABLE table_name ADD INDEX idx1 ( `func`), ADD INDEX idx2 ( `func`,`gene`), ADD INDEX idx3( `genedetail`); 以上这篇
-
MySQL大表中重复字段的高效率查询方法
MySQL大表重复字段应该如何查询到呢?这是很多人都遇到的问题,下面就教您一个MySQL大表重复字段的查询方法,供您参考. 数据库中有个大表,需要查找其中的名字有重复的记录id,以便比较.如果仅仅是查找数据库中name不重复的字段,很容易 复制代码 代码如下: SELECT min(`id`),`name` FROM `table` GROUP BY `name`; 但是这样并不能得到说有重复字段的id值.(只得到了最小的一个id值)查询哪些字段是重复的也容易 复制代码 代码如下: SELEC
-
MySql创建带解释的表及给表和字段加注释的实现代码
1 创建带解释的表 CREATE TABLE groups( gid INT PRIMARY KEY AUTO_INCREMENT COMMENT '设置主键自增', gname VARCHAR(200) COMMENT '列注释' ) COMMENT='表注释'; 2 修改现有列,加上解释 alter table test_data modify column test_desc int comment 'xxxx'; 3 修改现有表,加上解释 ALTER TABLE test_data
-
mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法
需求:把一个表某个字段内容复制到另一张表的某个字段. 实现sql语句1: 复制代码 代码如下: UPDATE file_manager_folder f1LEFT OUTER JOIN file_manager_folder f2 ON f1.name = f2.name AND f2.parentId = 54SET f1.parentId = 54 WHERE f2.name IS NULL AND f1.id IN (1,2,3); 实现sql语句2: 复制代码 代码如下: upd
-
MySQL表字段设置默认值(图文教程及注意细节)
环境 MySQL 5.1 + 命令行工具 问题 MySQL表字段设置默认值 解决 复制代码 代码如下: --SQL: CREATE TABLE test( i_a int NOT NULL DEFAULT 1, ts_b timestamp NOT NULL DEFAULT NOW(), c_c char(2) NOT NULL DEFAULT '1' ); --以下SQL不合法 --time_d time NOT NULL DEFAULT CURTIME(), --date_e date NO
随机推荐
- 详解使用export/import导出和导入docker容器
- 基于Vue的文字跑马灯组件(npm 组件包)
- iOS 10 推送高阶篇(必看)
- 深入oracle特定信息排序的分析
- JS实现仿UC浏览器前进后退效果的实例代码
- javascript学习笔记(六) Date 日期类型
- win7下MySql 5.7安装配置方法图文教程
- 简单整理MySQL的日志操作命令
- php处理斐波那契数列非递归方法
- Js的Array数组对象详解
- Java中Date,Calendar,Timestamp的区别以及相互转换与使用
- jQuery如何解决IE输入框不能输入的问题
- 最常用的jQuery表单验证(简单)
- android通过蓝牙接收文件打开时无法自动选择合适的应用程序
- 落伍惊现GG判断作弊的一些绝对机密标准
- 详解C++编程中的析构函数
- python实现简单的计时器功能函数
- Mybatis自动创建表和更新表结构
- Spring整合WebSocket应用示例(上)
- 利用rpm打包上线部署golang代码的方法教程