1

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

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

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

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

1 回答 1

1

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

无论如何,您确定要 md5(现在 || rand)吗?通过 now 和 rand 的合理实现,您不太可能出现重复,但如果 now() 没有太多粒度或者随机数不是一个好的随机数,那么在某些情况下您可能会遇到麻烦情景。

对这类事情使用现成的方案可能是一个更好的主意,例如使用 UUID(MySQL 似乎支持:http ://dev.mysql.com/doc/refman/5.0/en/ miscellaneous-functions.html#function_uuid)。

于 2011-10-19T19:51:14.433 回答