我有一个数百万行的生产表,我需要在不锁定表的情况下将最后4位数字复制到一个新的col中,我如何才能安全地做到这一点?
以下是我的一些失败的git评论:
ALTER TABLE tokens ADD last4_token varchar(4);
UPDATE tokens SET last4_token = SUBSTRING(full_token, -4);发布于 2022-11-15 19:26:02
这个问题有两部分:
为此,您可以使用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将添加字段和索引(第二点将需要索引)
运行此查询的次数_of_records/100次:UPDATE tokens SET last4_token = SUBSTRING(full_token, -4) where last4_token is null limit 100
pt-online-schema-change --alter "ALTER TABLE tokens DROP INDEX last4_token; ;" D=db,t=tokens删除索引(如果需要的话)另一种无需索引的解决方案是:
pt-online-schema-change --alter "alter table tokens add last4_token varchar(4) default null"Select concat('UPDATE tokens SET last4_token = SUBSTRING(full_token, -4) where id = ',id) from tokens into outfile '/tmp/sql.sql'
source /tmp/sql.sqlhttps://stackoverflow.com/questions/74450337
复制相似问题