MySQL是否支持使用哈希md5或其他自动填充字段的功能?
例如,我想将表中照片的主键用作hash
,以避免id
选择照片。
答案 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 ;