首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将现有列的最后4位数字安全地复制到mysql中的新列中,而不锁定表

将现有列的最后4位数字安全地复制到mysql中的新列中,而不锁定表
EN

Stack Overflow用户
提问于 2022-11-15 18:07:50
回答 1查看 29关注 0票数 0

我有一个数百万行的生产表,我需要在不锁定表的情况下将最后4位数字复制到一个新的col中,我如何才能安全地做到这一点?

以下是我的一些失败的git评论:

代码语言:javascript
复制
    ALTER TABLE tokens ADD last4_token varchar(4);
    UPDATE tokens SET last4_token = SUBSTRING(full_token, -4);
EN

回答 1

Stack Overflow用户

发布于 2022-11-15 19:26:02

这个问题有两部分:

  1. 如何在没有表锁的情况下添加索引

为此,您可以使用pt-online模式更改执行一些魔术,在不实际锁定表的情况下将字段添加到大表中:pt-online-schema-change --alter "alter table tokens add last4_token varchar(4) default null, add index(last4_token);" D=db,t=tokens将添加字段和索引(第二点将需要索引)

  1. 如何用其他字段中的4个最后数字更新该列:

运行此查询的次数_of_records/100次:UPDATE tokens SET last4_token = SUBSTRING(full_token, -4) where last4_token is null limit 100

  1. pt-online-schema-change --alter "ALTER TABLE tokens DROP INDEX last4_token; ;" D=db,t=tokens删除索引(如果需要的话)

另一种无需索引的解决方案是:

  1. pt-online-schema-change --alter "alter table tokens add last4_token varchar(4) default null"

  1. 生成更新列表:

代码语言:javascript
复制
Select concat('UPDATE tokens SET last4_token = SUBSTRING(full_token, -4) where id = ',id) from tokens into outfile '/tmp/sql.sql'
source /tmp/sql.sql
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74450337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档