【问题标题】:MySQL unique hash in field?字段中的MySQL唯一哈希?
【发布时间】:2019-05-17 08:36:59
【问题描述】:

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

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

【问题讨论】:

标签: mysql sql database-design sql-insert primary-key


【解决方案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 ;

【讨论】:

  • 可以使用带有唯一键的generated function,而不是触发器。但是它不能是主键。
猜你喜欢
  • 2011-02-15
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 2012-02-17
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
相关资源
最近更新 更多