mysql是否支持使用hashmd5或其他方法自动填充字段?例如,我想使用表中照片的主键作为 hash ,以避免选择照片 id .
hash
id
sd2nnvve1#
正如@mitchwheat所评论的,mysql支持各种加密函数:md5、sha、sha1和sha2。。。但是,使用自动哈希作为主键并不是一个好的做法。首先,一个自动递增的整数总是比一个散列更好;它更容易插入、访问和索引,而且需要较少的存储空间。另一件事是,通过使用散列,您将自己暴露在一个(小的,但真实的)冲突风险中。其次,实现自动哈希比实现自动递增整数要困难得多。由于函数不能用作列默认值,因此需要使用触发器,可能还需要一个单独的表来进行排序。看看这个答案,看看这个设置的演示。一个中间的选择是依赖于一个特定的字段或字段的组合,在插入(和更新)之前,您可以使用触发器自动散列这些字段来生成主键。比如:
DELIMITER $$ CREATE TRIGGER tg_bi_table1 BEFORE INSERT ON table1 FOR EACH ROW BEGIN SET NEW.id = MD5(CONCAT(NEW.field_to_hash1, NEW.field_to_hash2)); END$$ DELIMITER ;
1条答案
按热度按时间sd2nnvve1#
正如@mitchwheat所评论的,mysql支持各种加密函数:md5、sha、sha1和sha2。。。
但是,使用自动哈希作为主键并不是一个好的做法。
首先,一个自动递增的整数总是比一个散列更好;它更容易插入、访问和索引,而且需要较少的存储空间。另一件事是,通过使用散列,您将自己暴露在一个(小的,但真实的)冲突风险中。
其次,实现自动哈希比实现自动递增整数要困难得多。由于函数不能用作列默认值,因此需要使用触发器,可能还需要一个单独的表来进行排序。看看这个答案,看看这个设置的演示。
一个中间的选择是依赖于一个特定的字段或字段的组合,在插入(和更新)之前,您可以使用触发器自动散列这些字段来生成主键。
比如: