首页 > 解决方案 > 字段中的MySQL唯一哈希?

问题描述

MySQL 是否支持使用哈希 md5 或其他方法自动填充字段的能力?

例如,我想将表格中照片的主键用作hash,以避免选择照片id

标签: mysqlsqldatabase-designsql-insertprimary-key

解决方案


正如@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 ;

推荐阅读