MySQL字段中唯一的哈希值?

时间:2018-12-16 23:31:51

标签: mysql sql

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

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

1 个答案:

答案 0 :(得分:1)

@MitchWheat指出,mysql支持各种encryption functions:MD5,SHA,SHA1和SHA2,...

但是,使用自动哈希作为主键不是一个好习惯。

首先,一个自动递增的整数总是比哈希更好;它更易于插入,访问和索引,还需要较少的存储空间。另一件事是,通过使用哈希,您使自己暴露于(很小但真实的)碰撞风险中。

第二,实现自动散列要比自动递增的整数难得多。由于函数不能用作列的默认值,因此您将需要使用触发器,并且可能需要使用单独的表进行排序。有关此设置的说明,请参见this SO answer

一个中间选项是依赖特定字段或字段组合,您将在使用触发器生成主键的插入(和更新)操作之前自动对这些字段进行哈希处理。

类似的东西:

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 ;