0

TL;DR:什么是循环遍历 500k 行、将自定义转换逻辑/ciper 应用于每行中的列(或少数列)并使用转换后的数据更新列的有效方法?有没有办法在 SQL 中有效地做到这一点,而不必编写单独的程序来循环每一行并应用逻辑?

背景:我们有一个表(约 50 万行),有些列包含需要屏蔽的敏感数据。当我们屏蔽连接中使用的标识列时,屏蔽需要在所有其他表中保持一致。在考虑了 MD5 / CRC / 散列算法之后,我们决定坚持使用我们自己的密码算法,这将保证唯一性,而不会产生太多无意义的字符。

4

1 回答 1

0

如果要替换原地的值,则需要确保类型兼容——现有列与目标列具有相同的类型。然后:

update t
    set col = my_cipher(col);

这是相对昂贵的,因为每一行都在更新。

如果类型不同,那么您将面临更大的挑战。听起来您要更改的列是外键。您可能需要删除所有外键约束并修改表以使列具有相同的类型,更改值,然后重新添加外键。

于 2019-03-11T10:45:49.573 回答