MySQL如何使用WHERE中的两个加密字段更新记录

MySQL如何使用WHERE中的两个加密字段更新记录,mysql,sql,encryption,sql-update,Mysql,Sql,Encryption,Sql Update,不确定这是否可行,但如果可以的话,我希望一步到位。如果传入的值与另外两个加密的字段匹配,我想更新字段3。这是我所拥有的不起作用的东西 UPDATE tbl SET field3=CONCAT(field3, 'some additional value') WHERE field1 = ENCRYPTION_APPROACH('my_value_in_the_clear', ENCRYPTION_SETTINGS) AND field2 = ENCRYPTION_APPROACH('my_

不确定这是否可行,但如果可以的话,我希望一步到位。如果传入的值与另外两个加密的字段匹配,我想更新字段3。这是我所拥有的不起作用的东西

UPDATE tbl 
SET field3=CONCAT(field3, 'some additional value') 
WHERE field1 = ENCRYPTION_APPROACH('my_value_in_the_clear', ENCRYPTION_SETTINGS) AND 
field2 = ENCRYPTION_APPROACH('my_other_value_in_the_clear', ENCRYPTION_SETTINGS);
字段1和字段2不是键,但通过编程保证它们是唯一的。加密似乎正在工作,我可以使用相同的方法首先插入记录,然后再选择它。但是,当我使用已验证的测试数据运行此测试时,我得到0行受影响的数据,并且没有错误消息

我可以做一个复合调用,首先用同样的方法选择记录,然后用它的键更新它,这对不同的调用有效。但如果可以的话,我真的很想保持这一步。想法?

啊哈

环顾四周后,我找到了真正的解决办法。任何时候你有一个CONCAT并且一些记录失败,使用这个小技巧

UPDATE tbl 
SET field3=IFNULL(CONCAT(field3, 'some additional value'), 'some additional value')
WHERE field1 = ENCRYPTION_APPROACH('my_value_in_the_clear', ENCRYPTION_SETTINGS) AND 
field2 = ENCRYPTION_APPROACH('my_other_value_in_the_clear', ENCRYPTION_SETTINGS);
不是加密失败了。。。当CONCAT第一次作用于空字段时,它返回空值。这个小把戏可以让你通过第一次尝试计算上一个值的时候,并且可以处理所有后续调用