Mysql 插入前生成唯一md5哈希的触发器

Mysql 插入前生成唯一md5哈希的触发器,mysql,triggers,unique-key,Mysql,Triggers,Unique Key,我试图创建一个触发器,将一个唯一的随机字符串与插入表中的每条记录相关联 到目前为止,我在插入之前创建了一个触发器,它将生成哈希并将其添加到表中。但是,我想知道我应该如何确保这个新的哈希对我的表是唯一的 到目前为止,我有下面的触发器,但正如你所看到的,uniques部分丢失了 BEGIN DECLARE newhash VARCHAR(255); SELECT MD5(CONCAT(NOW(),RAND())) INTO newhash; SET NEW.`hash` = newhash; END

我试图创建一个触发器,将一个唯一的随机字符串与插入表中的每条记录相关联

到目前为止,我在插入之前创建了一个触发器,它将生成哈希并将其添加到表中。但是,我想知道我应该如何确保这个新的哈希对我的表是唯一的

到目前为止,我有下面的触发器,但正如你所看到的,uniques部分丢失了

BEGIN
DECLARE newhash VARCHAR(255);
SELECT MD5(CONCAT(NOW(),RAND())) INTO newhash;
SET NEW.`hash` = newhash;
END

该列在表定义中应该是唯一的,仅此而已

在任何情况下,您确定要md5(现在为| |兰德)?使用now和rand的合理实现,很可能不会有重复的,但是如果now()没有很多粒度,或者随机数不是一个好的随机数,那么在某些情况下,您可能会遇到麻烦


对于这类事情,最好使用现成的方案,例如使用UUID(MySQL似乎支持:)。

列在表定义中应该是唯一的,就是这样

在任何情况下,您确定要md5(现在为| |兰德)?使用now和rand的合理实现,很可能不会有重复的,但是如果now()没有很多粒度,或者随机数不是一个好的随机数,那么在某些情况下,您可能会遇到麻烦


对于这类事情,最好使用现成的方案,例如使用UUID(MySQL似乎支持:)。

注意MD5已损坏,我建议使用SHA2代替
SET NEW.hash=SHA2(CONCAT(salt,RAND()),512)
我真的只需要一个足够大的随机字符串。我不知道额外的8个字符除了比随机字符串长8个字符之外还能对我有什么帮助。你需要它做什么?使用uuid表示非安全内容,使用sha2表示安全。请注意,MD5已损坏,我建议使用sha2代替
SET NEW.hash=sha2(CONCAT(salt,RAND()),512)
我只需要一个足够大的随机字符串。我不知道额外的8个字符除了比随机字符串长8个字符之外还能对我有什么帮助。你需要它做什么?使用uuid表示非安全性内容,使用sha2表示安全性。