mysql - 字段中的MySQL唯一哈希?
问题描述
MySQL 是否支持使用哈希 md5 或其他方法自动填充字段的能力?
例如,我想将表格中照片的主键用作hash
,以避免选择照片id
。
解决方案
正如@MitchWheat 评论的那样,mysql 支持各种加密功能:MD5、SHA、SHA1 和 SHA2,...
但是,使用自动散列作为主键并不是一个好习惯。
首先,自增整数总是比散列执行得更好;它更容易插入、访问和索引,并且需要更少的存储空间。另一件事是,通过使用哈希,您将自己暴露在(小但真实的)碰撞风险中。
其次,实现自动散列比自动递增整数要困难得多。由于函数不能用作列默认值,您将需要使用触发器,并且可能需要使用单独的表进行排序。有关此设置的演示,请参阅此 SO 答案。
一个中间选项是依赖特定字段或字段组合,您将在插入(和更新)之前使用触发器自动散列以生成主键。
就像是 :
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 ;