Mysql给一个大表加一列_MySQL 大表添加一列的实现

本文探讨了在MySQL中为大型表添加列的解决方案,包括不同MySQL版本的在线DDL特性。介绍了ALTER TABLE语句的ALGORITHM和LOCK选项,以及如何减少对业务的影响。建议在业务低峰期执行,并避免大事务,以确保数据一致性。
摘要由CSDN通过智能技术生成

问题参考自: https://www.zhihu.com/question/440231149 ,mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?答案为个人原创

以前老版本 MySQL 添加一列的方式:

ALTER TABLE 你的表 ADD COLUMN 新列 char(128);

会造成锁表,简易过程如下:

新建一个和 Table1 完全同构的 Table2

对表 Table1 加写锁

在表 Table2 上执行 ALTER TABLE 你的表 ADD COLUMN 新列 char(128)

将 Table1 中的数据拷贝到 Table2

将 Table2 重命名为 Table1 并移除 Table1,释放所有相关的锁

如果数据量特别特别大,那么锁表时间很长,期间所有表更新都会阻塞,线上业务不能正常执行。

针对 MySQL 5.6(不包含)之前的版本,通过触发器将一个表的更新在另一个表上重复,并进行数据同步,当数据同步完成时,业务上修改表名为新表并发布。业务不会暂停。触发器设置类似于:

create trigger person_trigger_update AFTER UPDATE on 原有表 for each row

begin set @x = "trigger UPDATE";

Replace into 新表 SELECT * from 原有表 where 新表.id = 原有表.id;

END IF;

end;

MySQL 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值